專欄:MySQL數據庫成長記
個人主頁:手握風云
目錄
一、查看數據庫
二、創建數據庫
2.1. 語法
2.2. 示例
三、字符集編碼和校驗(排序)規則
3.1. 查看數據庫支持的字符集編碼
3.2. 查看數據庫支持的排序規則
3.3.?不同的字串集與排序規則對數據庫的影響
3.4.?查看系統默認字符集和排序規則
四、查看創建語句
4.1. 語法
五、修改數據庫
5.1. 語法
六、刪除數據庫
6.1. 語法
6.2. 注意事項
一、查看數據庫
//查看當前已有的數據庫
show databases;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
6 rows in set (0.00 sec)
????????這里需要注意,databases是復數形式,并且mysql命令行對大小寫不敏感。MySQL中每條SQL語句都必須以分號結尾,否則數據庫軟件就會認為這不是一條完整的語句。如果我們沒有寫完就按回車,就會另起一行。
mysql> show databases->;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
6 rows in set (0.00 sec)
? ? ? ? 已有庫里面的“sakila”“world”這些屬于測試庫,我們可以進行修改或者刪除的,“information_schema”“mysql”“performance_schema”“sys”這些都屬于系統庫,記錄的是MySQL自身信息和一些配置項,其中也包含我們的用戶名和登錄密碼。如果刪除了,就會導致MySQL無法正常啟動,我們就需要再重新安裝MySQL。其中set表示結果集,0.00sec表示運行消耗時間為10毫秒以內。
二、創建數據庫
2.1. 語法
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] 數據庫名稱 [create_option]create_option: [DEFAULT] {CHARACTER SET [=] charset_name| COLLATE [=] collation_name| ENCRYPTION [=] {'Y' | 'N'}
}
????????以上大寫部分為關鍵字;大括號里的內容必須存在;中括號里的內容可有可無;|表示任選其一;IF NOT EXISTS表示如果不存在則創建數據庫;CHARACTER SET是指定數據庫采?的字符集編碼;COLLATE是指定數據庫字符集的校驗規則;ENCRYPTION表示數據庫是否加密。
2.2. 示例
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
6 rows in set (0.08 sec)mysql> create database test3_21-> ;
Query OK, 1 row affected (0.03 sec)mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| test3_21 |
| world |
+--------------------+
7 rows in set (0.00 sec)
????????如果我們再去創建一個同名稱的數據庫,就會發出警告,并會告訴我們警告信息該數據庫已經存在。
mysql> create database test3_21;
ERROR 1007 (HY000): Can't create database 'test3_21'; database exists
? ? ? ? 當SQL語句在以上腳本當中運行時發生了錯誤,那么SQL語句的執行就會停住。那我們就可以加上一個校驗結果,來阻止錯誤的發生。
mysql> create database if not exists test3_21;
Query OK, 1 row affected, 1 warning (0.00 sec)
? ? ? ? 此時它就會提示我們存在一個警告,我們也可以使用SQL語句讓它顯示出來。
mysql> show warnings;
+-------+------+---------------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------------+
| Note | 1007 | Can't create database 'test3_21'; database exists |
+-------+------+---------------------------------------------------+
1 row in set (0.00 sec)
? ? ? ? 如果說我們在寫完一條SQL語句時,發現前面有錯誤,那我們就可以ctrl+C進行換行重新寫。
mysql> shown databases^C
mysql>
三、字符集編碼和校驗(排序)規則
3.1. 查看數據庫支持的字符集編碼
show charset;
? ? ? ? 對字符集的編碼,相當于兩個人用不同的語言進行交流,一個人用漢語,另一個人用英語,他們就相當于對相同的內容進行編碼。如果用A字符集編碼存儲數據,用B字符集編碼去解析,那么就會出現一堆亂碼。
+----------+---------------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+---------------------------------+---------------------+--------+
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
????????我們最熟悉的ascii對英語字母進行編碼,最大長度為1字節。如果說我們要對中文進行編碼,那么gb2312、gbk等進行編碼,這兩個最大長度為2個字節,相當于可以編寫2^16個字符。而其他國家還有其他的語言,比如阿拉伯語、法語等。為了支持全世界的編碼,就得對字符長度進行擴大,也就是MySQL8.0支持的默認字符集編碼utf8mb4,最長可以用4個字節表示一個字符。
| utf8mb4 | UTF-8 Unicode | utf8mb4_0900_ai_ci | 4 |
3.2. 查看數據庫支持的排序規則
show collation;
? ? ? ? MySQL8.0默認的排序規則:
| utf8mb4_0900_ai_ci | utf8mb4 | 255 | Yes | Yes | 0 | NO PAD |
3.3.?不同的字串集與排序規則對數據庫的影響
- ai是Accent-insensitive的縮寫,表示口聲不敏感
- ci是Case-insensitive的縮寫表示大小寫不敏感
- as是Accent-sensitive的縮寫,表示口聲敏感
- cs是Case-sensitive的縮寫,表示大小寫敏感
- bin表示二進制
3.4.?查看系統默認字符集和排序規則
????????默認字符集:
mysql> show variables like 'character%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 8.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.04 sec)
? ? ? ? 默認排序規則:
mysql> show variables like '%collation%';
+-------------------------------+--------------------+
| Variable_name | Value |
+-------------------------------+--------------------+
| collation_connection | gbk_chinese_ci |
| collation_database | utf8mb4_0900_ai_ci |
| collation_server | utf8mb4_0900_ai_ci |
| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci |
+-------------------------------+--------------------+
4 rows in set, 1 warning (0.00 sec)
四、查看創建語句
4.1. 語法
mysql> show create database 數據庫名稱;
mysql> show create database test3_21;
+----------+------------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database|
+----------+------------------------------------------------------------------------------------------------------------------------------------+
| test3_21 | CREATE DATABASE `test3_21` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
????????在“Create Database”對應的這一列里面,會出現與注釋相同的符號“/**/”,但這個其實是指當前mysql版本大于4.01和 8.0.16時,分別執行對應的語句。
五、修改數據庫
5.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}
}
????????對數據庫的修改主要是修改數據庫的字符集,校驗規則。
mysql> alter database test_db character set gbk;
Query OK, 1 row affected (0.01 sec)mysql> show create database test_db;
+----------+----------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------------------------------------------+
| test_db | CREATE DATABASE `test_db` /*!40100 DEFAULT CHARACTER SET gbk */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
????????但實際上,不建議對數據庫進行修改。因為修改之后的編碼不同,前面的數據還需要重新整理,效率非常低。大多數情況下還是將原來數據庫的資料導出再導入到新創建的數據庫里面。
六、刪除數據庫
6.1. 語法
DROP {DATABASE | SCHEMA} [IF EXISTS] 數據庫名稱;
mysql> drop database if exists test_db;
Query OK, 0 rows affected (0.04 sec)
? ? ? ? 關于刪除數據庫,有些時候可能會出現一些誤刪數據庫的操作,但也不必擔心。因為數據庫會定期對數據進行全量備份和增量備份,或者是通過日志進行恢復,或者是對磁盤進行物理恢復。
6.2. 注意事項
- 刪除數據庫是?個危險操作,不要隨意刪除數據庫
- 刪除數據庫之后,數據庫對應的?錄及?錄中的所有文件也會被刪除
- 刪除數據庫之后,使?show databases;語句查看不到對應的數據庫
? ? ? ? 在此路徑下,C:\ProgramData\MySQL\MySQL Server 8.0\Data,是MySQL的數據目錄,里面包含了當前數據庫服務管理的所有數據。如果我們把一個Excel文件看成是一個數據庫,里面的每一行就可以看作是每一行數據。如果我們想刪除一個數據庫,那么對應的文件也會被刪除。