分享到

簡介

MySQL 會在其管理的表格和資料庫中維護資料。表格會在預先定義的欄位和資料類型結構描述中儲存資料。資料庫是一種結構,可以容納多個表格、索引、程序,並有助於定義權限、自訂設定等的範圍。

在本指南中,我們將向您展示如何在 MySQL 中建立表格和資料庫。我們將向您展示如何管理這兩種結構的一些功能,然後我們將介紹如何在您不再需要它們時移除它們以進行清理。

先決條件

為了遵循本指南,您需要使用 mysql 命令列用戶端,以具有管理員權限的使用者身分登入 MySQL 伺服器。

如果您不想使用 root MySQL 管理員帳戶登入,您的使用者至少需要 CREATE 權限,才能執行本指南中描述的動作。

您可以輸入以下內容來檢查使用者可用的權限

SHOW GRANTS\G

如何建立新的資料庫?

我們要示範的第一件事是如何建立新的資料庫。在 MySQL 中,資料庫包含表格索引程序和其他通常與單一專案相關的資源。每個資源都必須在資料庫中建立,因此學習如何建立新的資料庫是很好的第一步。

用於建立新資料庫的基本語法如下所示

CREATE DATABASE <db_name>;

在執行命令之前,請將 <db_name> 取代為您想要給資料庫的名稱。此命令將建立具有給定名稱的資料庫,並將目前使用者設定為新資料庫的擁有者。

資料庫將針對字元集、定序和加密屬性使用系統範圍的預設值

  • 字元集:設定新資料庫的字元集。這是一個本地化選項,會影響哪些字元被視為大寫、小寫和數字。
  • 定序:設定資料庫的定序或排序順序。這是一個本地化選項,決定項目在排序時的組織方式。
  • 加密:設定新資料庫的加密。這是一個布林選項,可以是「Y」(是)或「N」(否)。

您可以輸入以下內容來尋找安裝可用的字元集

SHOW CHARACTER SET;

同樣地,您可以輸入以下內容來尋找可用的定序

SHOW COLLATION;

如果您想要為其中一個參數指定非預設值,您可以像這樣在主要建立陳述式之後新增它們

CREATE DATABASE <db_name>
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_0900_ai_ci'
ENCRYPTION = 'Y';

為了遵循本指南中的範例,請使用您執行個體的預設地區設定和 UTF8 字元集建立名為 school 的資料庫

CREATE DATABASE school CHARACTER SET = 'utf8mb4';

這將使用您提供的規格建立新的資料庫。

列出現有資料庫

若要列出伺服器上可用的資料庫,請輸入

SHOW DATABASES;

這將列出環境中目前定義的每個資料庫

+--------------------+
Database |
+--------------------+
information_schema |
mysql |
performance_schema |
school |
sys |
testing |
+--------------------+
6 rows in set (0.00 sec)

您可以使用 SHOW CREATE DATABASE 命令來驗證您提供的設定是否已套用至新的 school 資料庫

SHOW CREATE DATABASE school;

輸出將顯示用於建立資料庫的命令和選項,並使用任何套用的預設值來填補選項

+----------+----------------------------------------------------------------------------------------------------------------------------------+
Database | Create Database |
+----------+----------------------------------------------------------------------------------------------------------------------------------+
school | CREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

如何在 MySQL 中變更到不同的資料庫

建立資料庫後,您可以使用幾種不同的方式來處理它。

第一個選項是在您使用的每個命令中將資料庫指定為引數。但是,如果您要執行多個與資料庫物件相關的命令以節省時間,您也可以「切換到」或「使用」資料庫,將新的資料庫設定為您將執行的任何資料庫相關命令的預設內容。

若要變更到不同的資料庫,請輸入

USE <db_name>;

在我們的案例中,我們可以輸入以下內容來切換到我們建立的 school 資料庫

USE school;

在資料庫中建立表格

建立資料庫後,您可以在其中定義表格和其他物件,以儲存和管理您的資料。在 MySQL 中,表格包含表格名稱、欄位定義(這些定義又包含名稱、資料類型和約束等)以及表格選項。

MySQL 的 CREATE TABLE 命令的語法是什麼?

使用 MySQL 的 CREATE TABLE 命令建立表格的基本語法如下所示

CREATE TABLE <table_name> (
<column_name> <data_type> [<column_constraint>],
[<table_constraint>,]
);

我們可以將上述命令範本分解為以下元件

  • CREATE TABLE <table_name>:基本建立陳述式。<table_name> 預留位置應取代為您想要使用的表格名稱。
  • <column_name> <data_type>:定義表格中的基本欄位。<column_name> 預留位置應取代為您想要用於欄位的名稱。<data_type> 指定欄位的 MySQL 資料類型。表格中儲存的資料必須符合欄位結構和欄位資料類型才能被接受。
  • <column_constraint>欄位約束是選用的限制,可為資料新增額外需求。例如,您可以要求項目不得為 Null、唯一或正整數。
  • <table_constraint>:表格約束與欄位約束類似,但涉及多個欄位的互動。例如,您可以設定表格約束來檢查表格中的 DATE_OF_BIRTH 是否在 DATE_OF_DEATH 之前。

如何在表格尚不存在時才建立表格?

MySQL 的預設行為是,如果您嘗試建立已存在的表格,則會引發錯誤。但是,選用的 IF NOT EXISTS 子句可以新增至建立陳述式,以覆寫此行為。

您可以將 IF NOT EXISTS 子句插入到 CREATE TABLE 片語之後,但在表格名稱之前,來使用它

CREATE TABLE IF NOT EXISTS table_name (
column_name TYPE [column_constraint],
[table_constraint,]
);

這會修改命令的行為,如下所示:如果指定的表格名稱已存在,MySQL 將引發警告而不是錯誤。命令的其餘行為保持不變。

在 MySQL 資料庫中建立表格

上面給出的命令範本足以建立基本表格。為了進一步說明我們的範例,我們將在我們的 school 資料庫中建立兩個表格。一個表格將稱為 supplies,另一個將稱為 teachers

Entity relationship diagrams for supplies and teachers tables

supplies 表格中,我們將包含以下欄位

  • id:每種學校用品的唯一 ID。
  • name:特定學校用品的名稱。
  • description:物品的簡短描述。
  • manufacturer:物品製造商的名稱。
  • color:物品的顏色。
  • inventory:我們擁有的某種類型學校用品的數量。這絕不能少於 0。

我們可以使用以下 SQL 建立具有上述特性的 supplies 表格

CREATE TABLE supplies (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
description VARCHAR(255),
manufacturer VARCHAR(255),
color VARCHAR(255),
inventory INT CHECK (inventory >= 0)
);

這將在 school 資料庫中建立 supplies 表格。PRIMARY KEY 欄位約束是一種特殊約束,用於指示可以唯一識別表格中記錄的欄位。因此,約束指定欄位不得為 Null 且必須是唯一的。MySQL 會為主索引鍵欄位建立索引,以提高查詢速度。

輸入以下內容以驗證新表格是否存在

SHOW TABLES;
+------------------+
Tables_in_school |
+------------------+
supplies |
+------------------+
1 row in set (0.01 sec)

您可以輸入以下內容來驗證 結構描述是否反映您的定義

SHOW CREATE TABLE supplies\G
*************************** 1. row ***************************
Table: supplies
Create Table: CREATE TABLE `supplies` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`manufacturer` varchar(255) DEFAULT NULL,
`color` varchar(255) DEFAULT NULL,
`inventory` int DEFAULT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `supplies_chk_1` CHECK ((`inventory` >= 0))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec

我們指定的欄位、資料類型和約束都存在於輸出中,儘管排序和顯示方式可能有所不同。

接下來,建立 teachers 表格。在此表格中,應存在以下欄位

  • id:唯一的員工識別號碼。
  • first_name:教師的名字。
  • last_name:教師的姓氏。
  • subject:教師受聘教授的科目。
  • grade_level:教師受聘教授的學生的年級。

使用以下 SQL 建立具有上述結構描述的 teachers 表格

CREATE TABLE teachers (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(255),
last_name VARCHAR(255),
subject VARCHAR(255),
grade_level INT
);

如何建立具有主索引鍵和外來索引鍵的表格

您可以在我們其他一些 MySQL 指南中找到有關建立具有主索引鍵和外來索引鍵的表格的資訊。主索引鍵和外來索引鍵都是 MySQL 中的資料庫約束類型。

主索引鍵是一個特殊的欄位或欄位,保證在同一個表格中的不同列之間是唯一的。所有主索引鍵都可以用來唯一識別特定列。主索引鍵不僅確保每列的主索引鍵欄位都有唯一值,而且還確保沒有列包含該欄位的 NULL 值。通常,MySQL 中的主索引鍵使用以下格式來指定自動指派的遞增主索引鍵:id INT AUTO_INCREMENT PRIMARY KEY

外來索引鍵是一種確保一個表格中的一個或多個欄位與另一個表格中包含的值相符的方式。這有助於確保表格之間的參考完整性。

如何在 MySQL 中檢視表格

在 MySQL 中,您可以使用幾種不同的方式列出表格,具體取決於您要尋找的資訊。

如果您想查看資料庫中有哪些表格可用,請輸入

SHOW TABLES;
+------------------+
Tables_in_school |
+------------------+
supplies |
teachers |
+------------------+
2 rows in set (0.00 sec)

您也可以檢查表格的結構描述是否符合您的規格

DESCRIBE teachers;
+--------------+--------------+------+-----+---------+----------------+
Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
id | int | NO | PRI | NULL | auto_increment |
name | varchar(255) | YES | | NULL | |
description | varchar(255) | YES | | NULL | |
manufacturer | varchar(255) | YES | | NULL | |
color | varchar(255) | YES | | NULL | |
inventory | int | YES | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

teachers 表格似乎符合我們的定義。

如何使用 ALTER TABLE 命令變更表格

如果您需要變更 MySQL 中現有表格的結構描述,您可以使用 ALTER TABLE 命令。ALTER TABLE 命令與 CREATE TABLE 命令非常相似,但它作用於現有表格。

ALTER TABLE 語法

在 MySQL 中修改表格的基本語法如下所示

ALTER TABLE <table_name> <change_command> <change_parameters>;

<change_command> 表示您想要進行的確切變更類型,無論它是否涉及設定表格上的不同選項、新增或移除欄位,還是變更類型或約束。<change_parameters> 命令部分包含 MySQL 完成變更所需的任何其他資訊。

將欄位新增至表格

您可以使用 ADD 變更命令將欄位新增至 MySQL 表格。變更參數將包含欄位名稱、類型和選項,就像您在 CREATE TABLE 命令中指定它們一樣。

例如,若要將 text 類型的名為 missing_column 的欄位新增至名為 some_table 的表格,您將輸入

ALTER TABLE some_table ADD missing_column text;

從表格中移除欄位

相反地,如果您想要移除現有欄位,則可以使用 DROP COLUMN 命令。您需要指定要捨棄的欄位名稱作為變更參數

ALTER TABLE some_table DROP COLUMN useless_column;

變更欄位的資料類型

若要變更欄位的資料類型,您可以使用 ALTER COLUMN 變更命令與 MODIFY COLUMN 欄位命令。此內容中的參數包括欄位名稱及其新類型

ALTER TABLE resident MODIFY COLUMN id INT;

其他表格變更

可以使用 ALTER TABLE 命令達成許多其他類型的變更。如需有關可用選項的詳細資訊,請查看 ALTER TABLE 的官方 MySQL 文件

捨棄表格

如果您想要刪除表格,可以使用 DROP TABLE SQL 陳述式。這將刪除表格以及其中儲存的任何資料。

基本語法如下所示

DROP TABLE <table_name>;

如果表格存在,這將刪除表格;如果表格名稱不存在,則會擲回錯誤。

如果您希望在表格存在時刪除表格,而在表格不存在時不執行任何動作,則可以在陳述式中包含 IF EXISTS 限定詞

DROP TABLE IF EXISTS <table_name>;

預設情況下,在這些相依性存在時,無法刪除對其他表格或物件具有相依性的表格。

輸入以下內容以刪除我們稍早建立的 supplies 表格

DROP TABLE supplies;

我們將保留 teachers 資料庫,以示範刪除資料庫的陳述式也會移除所有子物件,例如表格。

捨棄資料庫

DROP DATABASE 陳述式告訴 MySQL 刪除指定的資料庫。基本語法如下所示

DROP DATABASE <database_name>;

<database_name> 預留位置取代為您要移除的資料庫名稱。如果找到資料庫,這將刪除資料庫。如果找不到資料庫,則會發生錯誤

DROP DATABASE some_database;
ERROR 1008 (HY000): Can't drop database 'some_database'; database doesn't exist

如果您希望在資料庫存在時刪除資料庫,否則不執行任何動作,請包含選用的 IF EXISTS 選項

DROP DATABASE IF EXISTS some_database;
Query OK, 0 rows affected, 1 warning (0.00 sec)

這將移除資料庫,如果找不到資料庫,則不執行任何動作。

若要移除我們在本指南中使用的 school 資料庫,請列出系統上的現有資料庫

SHOW DATABASES;
+--------------------+
Database |
+--------------------+
information_schema |
mysql |
performance_schema |
school |
sys |
testing |
+--------------------+
6 rows in set (0.00 sec)

使用以下命令刪除 school 資料庫

DROP DATABASE school;

這將移除 school 資料庫以及其中定義的 teachers 表格。

結論

本文涵蓋了如何在 MySQL 中建立和刪除資料庫和表格的基本知識。這些是設定資料庫系統和開始定義資料結構所需的一些最基本命令。

如前所述,本 MySQL 教學課程中涵蓋的 SQL 陳述式,尤其是 CREATE TABLE 陳述式,還有許多其他參數可用於變更系統的行為。您可以查看 官方 MySQL 文件來了解更多相關資訊。

常見問題

在 MySQL Workbench 中,您可以先建立新模型

一旦有了模型,您就可以新增新的結構描述,在 MySQL 中,這相當於新的資料庫。

在 MySQL 中變更表格的基本語法使用 ALTER TABLE,如下所示

ALTER TABLE <table_name> <change_command> <change_parameters>;

<change_command> 表示您想要進行的確切變更類型,無論它是否涉及設定表格上的不同選項、新增或移除欄位,還是變更類型或約束。

<change_parameters> 命令部分包含 MySQL 完成變更所需的任何其他資訊。

若要新增表格,您可以使用 ADD 變更命令。它看起來像這樣

ALTER TABLE some_table ADD missing_column text;

在 MySQL 中,沒有單一命令可以一次捨棄所有表格。您需要一個指令碼來執行所有表格。

捨棄表格的基本語法使用 DROP TABLE SQL 陳述式,並選擇性地包含 IF EXISTS

基本語法是

DROP TABLE IF EXISTS <table_name>;

若要在 MySQL 中捨棄索引,您可以使用 DROP INDEX 命令。基本語法包括 <index_name><table_name>

它看起來像這樣

DROP INDEX <index_name> ON <table_name>;

您可以在 MySQL 中建立表格時使用 TEMPORARY 關鍵字。這會建立一個僅在目前工作階段中可見的暫時表格,並且在工作階段結束時會自動刪除。

除了包含 TEMPORARY 之外,基本語法與建立表格時相同。其語法如下:

CREATE TEMPORARY TABLE table_name(
column_1_definition,
column_2_definition,
...,
table_constraints
);
關於作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以來一直撰寫關於資料庫、Linux、基礎設施和開發者工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不需要以第三人稱寫作,這對所有相關方來說都是一種解脫。