4、MySQL建立資料庫(CREATE DATABASE語句)

不善表演發表於2020-10-07

在 MySQL 中,可以使用 CREATE DATABASE 語句建立資料庫,語法格式如下:

CREATE DATABASE [IF NOT EXISTS] <資料庫名>
[[DEFAULT] CHARACTER SET <字符集名>] 
[[DEFAULT] COLLATE <校對規則名>];

[ ]中的內容是可選的。語法說明如下:

  • <資料庫名>:建立資料庫的名稱。MySQL 的資料儲存區將以目錄方式表示 MySQL
    資料庫,因此資料庫名稱必須符合作業系統的資料夾命名規則,不能以數字開頭,儘量要有實際意義。注意在 MySQL 中不區分大小寫。
  • IF NOT EXISTS:在建立資料庫之前進行判斷,只有該資料庫目前尚不存在時才能執行操作。此選項可以用來避免資料庫已經存在而重複建立的錯誤。
  • [DEFAULT] CHARACTER SET:指定資料庫的字符集。指定字符集的目的是為了避免在資料庫中儲存的資料出現亂碼的情況。如果在建立資料庫時不指定字符集,那麼就使用系統的預設字符集。
  • [DEFAULT] COLLATE:指定字符集的預設校對規則。

MySQL 的字符集(CHARACTER)和校對規則(COLLATION)是兩個不同的概念

字符集是用來定義 MySQL 儲存字串的方式,校對規則定義了比較字串的方式。後面我們會單獨講解 MySQL 的字符集和校對規則。

例項1:最簡單的建立 MySQL 資料庫的語句
在 MySQL 中建立一個名為 test_db 的資料庫。在 MySQL 命令列客戶端輸入 SQL 語句CREATE DATABASE test_db;即可建立一個資料庫,輸入的 SQL 語句與執行結果如下。

mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.12 sec);

“Query OK, 1 row affected (0.12 sec);”提示中,
“Query OK”表示上面的命令執行成功,
“1 row affected”表示操作隻影響了資料庫中一行的記錄,
“0.12 sec”則記錄了操作執行的時間。

若再次輸入CREATE DATABASE test_db;語句,則系統會給出錯誤提示資訊,如下所示:

mysql> CREATE DATABASE test_db;
ERROR 1007 (HY000): Can't create database 'test_db'; database exists

提示不能建立“test_db”資料庫,資料庫已存在。MySQL 不允許在同一系統下建立兩個相同名稱的資料庫。

可以加上IF NOT EXISTS從句,就可以避免類似錯誤,如下所示:

mysql> CREATE DATABASE IF NOT EXISTS test_db;
Query OK, 1 row affected (0.12 sec)

例項2:建立 MySQL 資料庫時指定字符集和校對規則

使用 MySQL 命令列工具建立一個測試資料庫,命名為 test_db_char,指定其預設字符集為 utf8,預設校對規則為 utf8_chinese_ci(簡體中文,不區分大小寫),輸入的 SQL 語句與執行結果如下所示:

CREATE DATABASE IF NOT EXISTS test_db_char
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_bin;


Query OK, 1 row affected (0.03 sec)

這時,可以使用SHOW CREATE DATABASE檢視 test_db_char 資料庫的定義宣告,發現該資料庫的指定字符集為 utf8,執行結果如下所示:

mysql> SHOW CREATE DATABASE test_db_char;
+--------------+-----------------------------------------------------+
| Database     | Create Database                                     |
+--------------+-----------------------------------------------------+
| test_db_char | CREATE DATABASE `test_db_char` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+--------------+-----------------------------------------------------+
1 row in set (0.00 sec)

“1 row in set (0.00 sec)”表示集合中有 1 行資訊,處理時間為 0.00秒。時間為 0.00 秒並不代表沒有花費時間,而是時間非常短,小於 0.01 秒。

相關文章