1.創建數據庫
標準語法:
CREATE DATABASE [IF NOT EXISTS] db_name [create _specification]
create _specification:
[DEFAULT] CHARACTER SET=charset_name
[DEFAULT] COLLATE collation_name
說明:
- 大寫的表示關鍵字,關鍵字可大寫可小寫。
- [ ]表示可選項,裏面的內容可寫可不寫。
- CHARACTER SET :指定數據庫採用的字符集。
- COLLATE:指定數據庫字符集的校驗規則。
使用案例
- 創建一個數據庫
create database db1;
當創建數據庫沒有指定字符集和校驗規則時,系統使用默認字符集:utf8,默認校驗規則utf8_general_ci
- 創建一個utf8字符集,並帶校驗規則的db2數據庫
create database db2 charset=utf8 collate utf8_general_ci;
2.字符集和校驗規則
2.1 字符集和校驗規則是什麼?
字符集:
字符的二進制編碼方式
二進制編碼到一套字符的映射
二進制->編碼->字
UTF-8:不一定是3字節,前面是0-1字節,10-2字節,110-3字節。在中文裏,全設置爲3字節,即在數據庫裏一個UTF-8佔了3字節。
說白了字符集可以控制是用什麼語言,utf8,就可以使用中文。
校驗規則:
是在字符集內用於比較字符的一套規則,即字符集的排序規則。
不區分的大小寫:utf8_general_ci
區分大小寫:utf8_bin
MySQL可以使用對種字符集和檢驗規則來組織字符。
2.2 查看系統默認字符集以及校驗規則
show variables like 'character_set_database';
show variables like 'collation_dadatbse';
這裏爲了方面,接下來我都以我的helloworld庫爲例,查找結果如下:
2.3 查看數據庫支持的字符集
show charset;
說明:圈出來的兩個字符集:BIG5,這個是漢字編碼的繁體字符集。還有一個GB是簡體的字符集。
2.4 查看數據庫支持的校驗規則
show collation;
這裏就不一一截圖了,我們可以找到utf8_general_ci規則:
2.5 校驗規則對數據庫的影響
- utf8_general_ci:不區分大小寫
創建一個數據庫test1,校驗規則使用utf8_general_ci,然後往裏面插入一些大寫小寫字母。操作如下:
create database test1 collate utf8_general_ci;
use test1;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
插入後結果如下:
- 區分大小寫:uft8_bin
創建一個數據庫test2,校驗規則使用utf8_bin,插入上述同樣的字母。
create database test2
use test2;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
插入後結果如下:
- 對於兩個不同校驗規則數據庫的查詢結果
對於test1:
對於test2:
3.操作數據庫
3.1 查看數據庫
show databases;
不管你此時身在那個庫裏,都可以直接使用這條語句查看所有的庫。
3.2 顯示創建語句
show create database +數據庫名;
這個語句可以使你查看到你原來創建這個庫的方式(數據庫名與字符集)。那麼我就來展示一下剛剛創建的test1庫的創建過程:
說明
- 數據庫名的反引號’ ',是爲了數據庫的名字剛與關鍵字相同。
- /*40100 DEFAULT… */ 表示如果當前mysql版本大於4.01版本,就執行這句話。不是註釋功能。
3.3 修改數據庫
對數據庫的修改主要指的是修改數據庫的字符集和校驗規則。
標準語法:
alter database db_name [alter_spacification];
alter_spacification:
[DEFAULT] CHARACTER SET=charset_name
[DEFAULT] COLLATE collation_name
使用案例:
- 將test1數據庫的字符集改成gbk
alter database test1 charset=gbk;
我們可以很明顯地看到,此時test1的字符集已經變成了gbk。
- 將test1的字符校驗規則改成區分大小寫的字符集:utf8_bin
alter database test1 collate utf8_bin;
結果也顯而見之。
- 一些探索
那麼我想回過頭來看看test1庫修改校驗規則後,之前創建的表person裏面的select結果會不會不一樣呢?我們來測試一下。
結果竟然是沒有,所以person表所使用的校驗規則並沒有改變。那麼試試創建一個新表看看它的校驗規則是怎樣?
在這裏我創建了一張新表person1,並插入和person相同的四組元素。
顯而易見,在test1修改爲區分大小寫的校驗規則後,新創建的person1表纔開始使用這個新的校驗規則。
結論:當修改數據庫的校驗規則時,對之前已經建立的表沒有影響,只對後面重新建立的表纔有影響。
3.3 刪除數據庫
drop database[IF_EXITS]db_name;
刪除結果:
- 數據庫內看不到對應的數據庫。
- 對應的數據庫文件、級聯、裏面的數據都將全部刪除。
所以不要隨意刪庫跑路:)
3.4 備份和恢復
備份(前提是退出MariDB連接)
mysqldump -p3306 -u root -p +密碼 -B +數據庫名稱 > 數據庫備份存儲的文件路徑//-p3306可省略
實例:將test1庫備份到文件
mysqldump -u root -p******* -B test1 > ./mytest1.sql
我們可以看到在目錄下已經生成了備份的mytest.sql文件,可以使用cat 查看內容(包含了整個創建數據庫,建表,導入數據的所有語句)。
還原
mysql> source mytest1.sql;
3.5 查看連接情況
show processlist;
這個語句的作用是可以告訴我當前有哪些用戶連接到了我的MySQL,如果有不認識的用戶,那麼我的數據庫就有可能被入侵了。當數據庫運行比較慢時,可以試試用用這招。