簡介
MySQL 在表和資料庫中管理其資料。表在預定義的列和資料型別模式中儲存資料。資料庫是一種可以容納多個表、索引、過程的結構,並有助於定義許可權、自定義等的範圍。
在本指南中,我們將向您展示如何在 MySQL 中建立表和資料庫。我們將展示如何管理這兩種結構的一些功能,然後我們將介紹如何在不再需要它們時將其刪除以進行清理。
先決條件
要遵循本指南,您需要使用具有管理許可權的使用者透過 mysql 命令列客戶端登入到 MySQL 伺服器。
如果您不想使用 root MySQL 管理賬戶登入,您的使用者至少需要 CREATE 許可權才能執行本指南中描述的操作。
您可以輸入以下命令來檢查使用者的可用許可權:
SHOW GRANTS\G
如何建立新資料庫?
我們將首先演示如何建立一個新的資料庫。在 MySQL 中,資料庫包含表、索引、儲存過程以及通常與單個專案相關的其他資源。這些資源都必須在資料庫中建立,因此學習如何建立新資料庫是一個很好的第一步。
建立新資料庫的基本語法如下:
CREATE DATABASE <db_name>;
執行命令前,請將 <db_name> 替換為您希望為資料庫指定的名稱。此命令將建立具有給定名稱的資料庫,並將當前使用者設定為新資料庫的所有者。
資料庫將使用系統範圍內的字元集、排序規則和加密屬性的預設值:
- CHARACTER SET(字元集):設定新資料庫的字元集。這是一個本地化選項,影響哪些字元被視為大寫、小寫和數字。
- COLLATE(排序規則):設定資料庫的排序規則。這是一個本地化選項,決定了專案在排序時的組織方式。
- ENCRYPTION(加密):設定新資料庫的加密。這是一個布林選項,可以是 '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 子句來覆蓋此行為。
您可以透過在 CREATE TABLE 短語之後但在表名之前插入 IF NOT EXISTS 子句來使用它。
CREATE TABLE IF NOT EXISTS table_name (column_name TYPE [column_constraint],[table_constraint,]);
這將修改命令的行為如下:如果指定的表名已存在,MySQL 將發出警告而不是錯誤。命令的其餘行為保持不變。
在 MySQL 資料庫中建立表
上面給出的命令模板足以建立基本表。為了進一步闡述我們的示例,我們將在 school 資料庫中建立兩個表。一個表名為 supplies,另一個表名為 teachers。
在 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: suppliesCreate 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_ci1 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 命令非常相似,但它作用於現有表。
修改表語法
在 MySQL 中修改表的基本語法如下:
ALTER TABLE <table_name> <change_command> <change_parameters>;
<change_command> 指示您希望進行的具體更改型別,無論是設定表上的不同選項、新增或刪除列,還是更改型別或約束。<change_parameters> 命令部分包含 MySQL 完成更改所需的任何額外資訊。
向表中新增列
您可以使用 ADD 更改命令向 MySQL 表中新增列。更改引數將包括列名、型別和選項,就像您在 CREATE TABLE 命令中指定它們一樣。
例如,要向名為 some_table 的表中新增一個名為 missing_column 且型別為 text 的列,您可以鍵入:
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 命令實現。有關可用選項的更多資訊,請查閱 MySQL 官方 ALTER TABLE 文件。
刪除表
如果要刪除表,可以使用 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);

