介紹如何在 MySQL/MariaDB 資料庫中,以指令的方式建立、修改或刪除資料表。
在建立資料表之前,建議先檢查一下該資料表是否已經存在,若存在則先將其刪除:
-- 若 persons 資料表存在,則刪除之 DROP TABLE IF EXISTS persons;
接著使用 CREATE TABLE
指令建立新的資料表:
-- 建立 persons 資料表 CREATE TABLE persons ( id INT NOT NULL AUTO_INCREMENT, -- 序號,整數、非空、自動遞增 name VARCHAR(255), -- 名字,可變長度的文字 age INT UNSIGNED, -- 年齡,非負整數 city ENUM('Taipei', 'Hsinchu', 'Kaohsiung'), -- 所在城市,固定選項 PRIMARY KEY (id) -- 主鍵 );
建立好資料表之後,檢查一下資料表的結構:
-- 查看 persons 資料表結構 DESCRIBE persons;
+-------+--------------------------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------------------------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | age | int(10) unsigned | YES | | NULL | | | city | enum('Taipei','Hsinchu','Kaohsiung') | YES | | NULL | | +-------+--------------------------------------+------+-----+---------+----------------+
這樣就完成資料表的建立了。
若要在既有的資料表中,新增一個欄位,可以用 ALTER TABLE
指令配合 ADD
處理:
-- 在 persons 資料表中新增 email 欄位,放在 name 欄位後方 ALTER TABLE persons ADD email VARCHAR(50) AFTER name;
檢查一下資料表的結構:
-- 查看 persons 資料表結構 DESCRIBE persons;
+-------+--------------------------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------------------------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | email | varchar(50) | YES | | NULL | | | age | int(10) unsigned | YES | | NULL | | | city | enum('Taipei','Hsinchu','Kaohsiung') | YES | | NULL | | +-------+--------------------------------------+------+-----+---------+----------------+
若要將資料表中特定的欄位刪除,可以使用 ALTER TABLE
指令配合 DROP
處理:
-- 刪除 persons 資料表中的 email 欄位 ALTER TABLE persons DROP email;
這樣就可以將 email
這個欄位從 persons
資料表中刪除了。
如果想要修改既有資料表中某個欄位的屬性(例如資料類型、預設值等),可以使用 ALTER TABLE
指令配合 MODIFY
處理,例如將 age
欄位的資料型態改為 TINYINT UNSIGNED
:
-- 將 age 欄位的資料型態改為 TINYINT UNSIGNED ALTER TABLE persons MODIFY age TINYINT UNSIGNED;
檢查一下資料表的結構:
-- 查看 persons 資料表結構 DESCRIBE persons;
+-------+--------------------------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------------------------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | age | tinyint(3) unsigned | YES | | NULL | | | city | enum('Taipei','Hsinchu','Kaohsiung') | YES | | NULL | | +-------+--------------------------------------+------+-----+---------+----------------+
若只要修改欄位的預設值,可以改用 ALTER TABLE
指令配合 ALTER
處理:
-- 將 city 欄位的預設值改為 "Taipei" ALTER TABLE persons ALTER city SET DEFAULT "Taipei";
檢查一下資料表的結構:
-- 查看 persons 資料表結構 DESCRIBE persons;
+-------+--------------------------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------------------------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | age | tinyint(3) unsigned | YES | | NULL | | | city | enum('Taipei','Hsinchu','Kaohsiung') | YES | | Taipei | | +-------+--------------------------------------+------+-----+---------+----------------+
若要刪除預設值,可以使用:
-- 將 city 欄位的預設值刪除 ALTER TABLE persons ALTER city DROP DEFAULT;
若要刪除資料表,可以使用 DROP TABLE
指令:
-- 刪除資料表 DROP TABLE persons;
若要刪除的資料表本來就不存在,這行指令就會生錯誤,這時候可以加上 IF EXISTS
自動檢查資料表是否存在,若存在則刪除,若不存在也不會產生錯誤:
-- 若資料表存在,則刪除 DROP TABLE IF EXISTS persons;
參考資料:gitbook.net