MySQL操作數(shù)據庫實戰(zhàn)指南
一.創(chuàng)建數(shù)據庫
1. 創(chuàng)建數(shù)據庫的方式
create database database1;
帶選項的創(chuàng)建
create database if not exists database1;
如果不存在(if not exists)才創(chuàng)建數(shù)據庫database1。
2. 創(chuàng)建數(shù)據庫時的編碼問題
與數(shù)據打交道的數(shù)據庫的創(chuàng)建一定與編碼有關系。創(chuàng)建數(shù)據庫的時候,有兩個編碼集:
- 數(shù)據庫編碼集:數(shù)據庫未來存儲數(shù)據的編碼集。
- 數(shù)據庫校驗集:支持數(shù)據庫,進行字段比較使用的編碼,本質也是一種讀取數(shù)據庫中數(shù)據的采用的編碼格式。
因此,數(shù)據庫無論對數(shù)據做任何操作,都需要保證數(shù)據庫的操作和編碼必須是編碼一致的。
查看系統(tǒng)默認支持的字符集和校驗集:
show variables like 'character_set_database';
show variables like 'collation_database';
查看connection、database、server的校驗集:
show variables like 'collation_%';
大部分情況下,數(shù)據庫的連接,數(shù)據庫本身、數(shù)據庫的服務器都是utf8的。在最開始的my.cnf配置中,我們把默認字符集全部配成了utf8進行統(tǒng)一,如果不配置,可能就會因為編碼的不同導致無法正確解析數(shù)據。
查看數(shù)據庫全部的字符集
show charset;
查看對照表,數(shù)據庫選擇的就是其中的utf8的字符集。
查看數(shù)據庫支持的字符集校驗規(guī)則
show collation;
3. 指定編碼創(chuàng)建數(shù)據庫
當我們創(chuàng)建數(shù)據庫沒有指定字符集和校驗規(guī)則時,系統(tǒng)使用默認字符集:utf8,校驗規(guī)則是:utf8_general_ci。
兩種方式:
create database d2 charset=utf8; #指定編碼格式utf8
create database d3 set utf8; #指定編碼格式utf8
編碼集字符集同時設置:
create database d4 charset=utf8 collate utf8_general_ci; #既指明編碼,又指明校驗規(guī)則
根據字符集表以及校驗表創(chuàng)建不同編碼和校驗規(guī)則的數(shù)據庫
4. 驗證校驗規(guī)則對數(shù)據庫的影響
不區(qū)分大小寫
創(chuàng)建一個數(shù)據庫,校驗規(guī)則使用utf8_ general_ ci[不區(qū)分大小寫]
create database test1 collate utf8_general_ci;
use test1;
create table person(name varchar(20));
由于是不區(qū)分大小寫的,所以在指定查’a’的時候,utf8_ general_ ci校驗規(guī)則會將’A’和’a’一并查出:
區(qū)分大小寫
創(chuàng)建一個數(shù)據庫,校驗規(guī)則使用utf8_ bin[區(qū)分大小寫]
create database test2 collate utf8_bin;
use test2;
create table if not exists person(name varchar(20));
因此,校驗規(guī)則的不同,我們查出的結果也有可能不同。
校驗規(guī)則的不同,排序的順序也會不同:(從小到大)
故忽略大小寫時,大小寫的排序不做區(qū)分。
二.數(shù)據庫與文件系統(tǒng)的關系
創(chuàng)建數(shù)據庫:create database db_name; 本質就是在/var/lib/mysql創(chuàng)建一個目錄。
刪除數(shù)據庫:drop database db_name; 本質就是在/var/lib/mysql刪除目錄。
因此,我們可以在/var/lib/mysql上創(chuàng)建目錄,那么數(shù)據庫層面也一定會產生相應的數(shù)據庫。
同理,在mysql目錄中刪掉一個目錄,數(shù)據庫層面的對應數(shù)據庫也會被刪掉。
當然,絕對不應該在文件系統(tǒng)層面創(chuàng)建目錄從而生成對應數(shù)據庫,這樣是不合理的。因此mysql8.0就禁掉了這個功能,而mysql5.6支持。
三.操縱數(shù)據庫
1. 查看數(shù)據庫
show databases;
如果想要確定是在哪個數(shù)據庫里,可以執(zhí)行:
select database();
2. 刪除數(shù)據庫
drop database db_name;
執(zhí)行刪除之后的結果:
- 數(shù)據庫內部看不到對應的數(shù)據庫
- 對應的數(shù)據庫文件夾被刪除,級聯(lián)刪除,里面的數(shù)據表全部被刪
注意:不要隨意刪除數(shù)據庫
3. 修改數(shù)據庫
對數(shù)據庫的修改主要指的是修改數(shù)據庫的字符集,校驗規(guī)則
alter database test2 charset=gbk collate gbk_Chinese_ci;
四.數(shù)據庫的備份和恢復
1.數(shù)據庫的備份
mysqldump -P3306 -u root -p 密碼 -B 數(shù)據庫名 > 數(shù)據庫備份存儲的文件路徑
-B:代表選擇數(shù)據庫的選項。
test1.sql中存儲的不僅僅是test1數(shù)據庫中的數(shù)據,還有歷史上創(chuàng)建過的命令:
至此就完成了對數(shù)據庫test1的備份操作。
2.數(shù)據庫的恢復
現(xiàn)在,將test1數(shù)據庫刪掉:
這樣,在/var/lib/mysql的路徑下,一定也不存在test1目錄。
通過pwd命令,我們知道test1.sql所在的路徑:
然后,通過以下恢復命令:
mysql> source /root/MySQL/test1.sql;
此時,就可以查看到對應test1的數(shù)據庫及其內容:
注意事項
如果備份的不是整個數(shù)據庫,而是其中的一張表,怎么做?
mysqldump -u root -p 數(shù)據庫名 表名1 表名2 > 路徑/mytest.sql
同時備份多個數(shù)據庫
mysqldump -u root -p -B 數(shù)據庫名1 數(shù)據庫名2 ... > 數(shù)據庫存放路徑
如果備份一個數(shù)據庫時,沒有帶上-B參數(shù), 在恢復數(shù)據庫時,需要先創(chuàng)建空數(shù)據庫,然后使用數(shù)據庫,再使用source來還原。
五.查看連接情況
如果在使用數(shù)據庫時,出現(xiàn)卡頓,那么有可能訪問數(shù)據庫的不止你一個,所以,通過如下命令,我們可以看到User的數(shù)量及名稱Id。
show processlist;
這可以告訴我們當前有哪些用戶連接到我們的MySQL,如果查出某個用戶不是你正常登陸的,很有可能你的數(shù)據庫被人入侵了。
總結
到此這篇關于MySQL操作庫的文章就介紹到這了,更多相關MySQL操作庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
單個select語句實現(xiàn)MySQL查詢統(tǒng)計次數(shù)
MySQL中查詢統(tǒng)計次數(shù)往往語句寫法很復雜,下文就教您一個只用單個select語句就實現(xiàn)的方法,希望對您能夠有所幫助2014-05-05Mysql 5.6使用配置文件my.ini來設置長時間連接數(shù)據庫的問題
這篇文章主要介紹了Mysql 5.6使用配置文件my.ini來設置長時間連接數(shù)據庫,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07數(shù)據庫中update與delete使用表別名的深入研究
本文介紹了UPDATE和DELETE?SQL語句在Oracle,?SQLite,?PostgreSQL,?MYSQL,?mariadb等數(shù)據庫系統(tǒng)中的執(zhí)行差異,文中通過代碼介紹的非常詳細,對數(shù)據庫開發(fā)和維護人員有指導意義,需要的朋友可以參考下2024-10-10