文章目錄
- MYSQL:庫的操作
- 1. 本文簡述
- 2. 查看數據庫
- 2.1 語法
- 3. 創建數據庫
- 3.1 語法
- 3.2 示例
- 3.2.1 創建一個簡單的數據庫
- 3.2.2 使用 `IF NOT EXISTS` 防止重復創建
- 3.2.3 再次運行,觀察現象
- 3.2.4 查看這個警告到底是什么
- 3.2.5 創建數據庫允許使用關鍵字
- 4. 字符集與排序規則
- 4.1 查看支持的字符集
- 4.2 查看支持的排序規則
- 4.3 字符集與排序規則的影響
- 4.4 查看系統默認配置
- 4.5 創建時指定字符集和排序規則
- 5. 查看數據庫的“出生證明”
- 5.1 語法
- 5.2 示例
- 6. 修改數據庫
- 6.1 語法
- 6.2 示例
- 7. 刪除數據庫
- 7.1 語法
- 7.2 示例
- 7.3 注意事項
MYSQL:庫的操作
在學習任何數據庫時,最基礎也是最重要的一步,就是學會如何管理“庫”(Database)。MySQL中關于庫的增、刪、改、查等一系列核心操作。
1. 本文簡述
- 熟練地創建、查看、修改和刪除數據庫。
- 理解字符集(Character Set)和排序規則(Collation)這兩個重要概念。
2. 查看數據庫
在我們開始創建自己的數據庫之前,不妨先看看當前MySQL中已經有哪些數據庫了。這就像是來到一個新的工作臺,先熟悉一下上面都有些什么工具。
2.1 語法
我們可以用下面這個非常直觀的命令來查看:
-- 注意,這里的 DATABASES 是復數形式
show databases;
- 這個命令對大小寫不敏感,所以
show databases;
和SHOW DATABASES;
的效果是一樣的。
3. 創建數據庫
熟悉了環境,接下來就是重頭戲——創建我們自己的數據庫。
3.1 語法
創建數據庫的基本語法是這樣的:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_option] ...-- create_option 是創建時的一些可選項
create_option: [DEFAULT] {CHARACTER SET [=] charset_name| COLLATE [=] collation_name| ENCRYPTION [=] {'Y' | 'N'}
}
我們來拆解一下這個語法:
CREATE DATABASE
是核心指令。DATABASE
和SCHEMA
在這里是同義詞,用哪個都行。[IF NOT EXISTS]
是一個非常有用的可選項。它表示“如果這個數據庫不存在,那么就創建它”。這可以避免因為數據庫已存在而導致的執行錯誤。db_name
就是我們要給數據庫起的名字。CHARACTER SET
:用來指定數據庫默認的字符集編碼,比如我們常用的utf8mb4
。COLLATE
:用來指定數據庫的排序規則,它決定了數據庫如何對字符串進行比較和排序。ENCRYPTION
:這是MySQL 8.0.16版本引入的新選項,用于設定數據庫是否默認加密。
3.2 示例
理論說完了,我們來實際上手操作一下。
3.2.1 創建一個簡單的數據庫
比如,我們來創建一個名為 test001
的數據庫。
mysql> create database test001;
看到 Query OK
,就說明我們的第一個數據庫已經成功創建!
3.2.2 使用 IF NOT EXISTS
防止重復創建
如果我們不確定一個數據庫是否存在,最好帶上 IF NOT EXISTS
。
mysql> create database if not exists testdb;
3.2.3 再次運行,觀察現象
如果我們再運行一次上面的命令,會發生什么呢?
mysql> create database if not exists testdb;
Query OK, 1 row affected, 1 warning (0.01 sec) -- 注意,這次出現了一個警告(warning)
沒有報錯,但多了一個 warning
。這正是 IF NOT EXISTS
的作用:它發現 testdb
已經存在,所以沒有執行創建操作,而是給出了一個提示。
3.2.4 查看這個警告到底是什么
我們可以用 show warnings;
命令來查看具體信息:
mysql> show warnings;
1 row in set (0.00 sec)
-- 提示信息很明確:無法創建 'testdb',因為它已經存在了。
這個過程很好地展示了 IF NOT EXISTS
如何讓我們的操作更加“健壯”。
順便一提,當一個數據庫被成功創建后,MySQL會在其數據目錄下生成一個和數據庫同名的文件夾,用來存放這個庫里所有的數據和表。
3.2.5 創建數據庫允許使用關鍵字
CREATE DATABASE `database`;
MySQL中允許開發者使用關鍵字命名,使用反引號把關鍵字引起來,database
使用其他關鍵字同理:from to password user
4. 字符集與排序規則
在創建數據庫時,我們提到了兩個重要選項:CHARACTER SET
和 COLLATE
。這兩個概念對于處理各種語言的文字(尤其是中文)至關重要,我們必須搞明白。
4.1 查看支持的字符集
MySQL支持哪些字符集?我們可以用 show charset;
命令查看。
show charset;
- 在 MySQL 8.0 版本中,默認的字符集是
utf8mb4
,它幾乎可以表示世界上所有的字符,非常強大。而在稍早的 MySQL 5.7 版本中,默認的還是latin1
,它對中文的支持就不那么友好了。
4.2 查看支持的排序規則
與字符集配套的是排序規則,它定義了字符之間如何比較大小。我們可以用 show collation;
查看所有支持的規則。
show collation;
- 同樣,MySQL 8.0 默認的排序規則是
utf8mb4_0900_ai_ci
,而 5.7 版本默認是utf8mb4_general_ci
。
4.3 字符集與排序規則的影響
這些規則的名字看起來很長,但其實是很有規律的。我們以 utf8mb4_0900_ai_ci
為例來解讀一下:
utf8mb4
: 指的是字符集。它是對Unicode標準的一種實現,最多使用4個字節來表示一個字符,因此能完美支持包括Emoji在內的各種文字。0900
: 指的是它所基于的Unicode排序算法(UCA)的版本,這里是 9.0.0。ai
: Accent-insensitive 的縮寫,表示“不區分聲調”。比如a
和á
會被認為是一樣的。ci
: Case-insensitive 的縮寫,表示“不區分大小寫”。比如A
和a
會被認為是一樣的。
與之對應的還有:
as
: Accent-sensitive,區分聲調。cs
: Case-sensitive,區分大小寫。bin
: Binary,二進制排序。直接根據字符的二進制編碼來比較,最嚴格,效率也最高。
理解了這些,我們就能根據需求選擇最合適的排序規則了。
4.4 查看系統默認配置
那么,當前整個MySQL服務的默認配置是什么呢?我們可以通過查詢系統變量來看到。
查看系統默認字符集:
mysql> show variables like '%character%';
-- 這個命令會列出所有和 'character' 相關的系統變量
查看系統默認排序規則:
mysql> show variables like '%collation%';
-- 這個命令會列出所有和 'collation' 相關的系統變
4.5 創建時指定字符集和排序規則
現在我們知道了這些概念,就可以在創建數據庫時明確指定它們了。
-- 創建一個名為 java01 的庫,如果它不存在
-- 明確指定使用 utf8mb4 字符集
-- 和 utf8mb4_0900_ai_ci 排序規則
create database if not exists java01 character set utf8mb4 collate utf8mb4_0900_ai_ci;
5. 查看數據庫的“出生證明”
當我們想回顧一個數據庫當初是如何被創建的,比如它的默認字符集是什么,就可以查看它的創建語句。
5.1 語法
show create database db_name;
5.2 示例
我們來看看剛才創建的 java01
庫。
mysql> show create database java01;
這里有幾個有趣的細節:
- 數據庫名
java01
被反引號`
包圍了。這是一個好習慣,可以防止我們的庫名或表名與MySQL的關鍵字沖突。 /*!40100 ... */
和/*!80016 ... */
這種看起來像注釋的語法,其實是MySQL的特定版本執行指令。它表示:只有當MySQL的版本大于等于4.01.00(或8.0.16)時,才執行里面的語句。這是一種保證向后兼容性的巧妙設計。
6. 修改數據庫
如果數據庫創建之后,我們想修改它的一些屬性,比如改一下默認的字符集,也是可以的。
6.1 語法
ALTER {DATABASE | SCHEMA} [db_name]alter_option ...alter_option: {[DEFAULT] CHARACTER SET [=] charset_name| [DEFAULT] COLLATE [=] collation_name| [DEFAULT] ENCRYPTION [=] {'Y' | 'N'}| READ ONLY [=] {DEFAULT | 0 | 1}
}
對數據庫的修改,最常見的就是修改它的默認字符集和排序規則。
6.2 示例
我們來把之前創建的 test001
數據庫的字符集改成 gbk
。
mysql> alter database test001 character set gbk;
Query OK, 1 row affected (0.01 sec)-- 修改完之后,我們再來查看一下它的創建語句,驗證一下
mysql> show create database test001;
可以看到,默認字符集已經成功變成了 gbk
。
7. 刪除數據庫
最后,我們來看看如何刪除一個數據庫。
7.1 語法
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;
7.2 示例
mysql> drop database testdb;
7.3 注意事項
這是一個非常危險的操作,一定要三思而后行!
- 刪除數據庫會永久移除庫里所有的數據和表,通常是不可恢復的。
- 在生產環境中,執行這個命令前一定要再三確認,并且做好備份。
- 刪除之后,物理存儲上對應的文件夾也會被一并刪除。