資料表是關聯式資料庫儲存資料的基本單位。本文系統整理 MySQL CREATE TABLE、ALTER TABLE、DROP TABLE 核心 DDL 操作,涵蓋欄位定義、完整性約束、主外鍵、索引、分區等進階特性。
建立表:CREATE TABLE
CREATE TABLE table_name (
column_name data_type [integrity_constraints],
...,
[table_constraints]
) ENGINE=storage_engine DEFAULT CHARSET=charset;
核心完整性約束
| 約束 | 語法 | 說明 |
| 主鍵 | PRIMARY KEY | 唯一標識每行,非空、唯一,單欄或複合 |
| 外鍵 | FOREIGN KEY (col) REFERENCES parent_table(col) | 關聯父表主鍵,維護參考完整性 |
| 非空 | NOT NULL | 禁止 NULL 值 |
| 唯一 | UNIQUE | 值不可重複,允許多個 NULL |
| 自增 | AUTO_INCREMENT | 整數型主鍵自動遞增,每表僅一欄 |
| 預設值 | DEFAULT value | 插入時未指定則使用預設值 |
主鍵定義範例
-- 單欄主鍵
CREATE TABLE student (
stu_id INT PRIMARY KEY,
name VARCHAR(20)
);
-- 複合主鍵
CREATE TABLE score (
stu_id INT,
course_id INT,
score DECIMAL(5,2),
PRIMARY KEY (stu_id, course_id)
);
外鍵定義範例
CREATE TABLE orders (
order_id INT PRIMARY KEY,
cust_id INT,
FOREIGN KEY fk_cust (cust_id) REFERENCES customer(cust_id)
);
注意:子表外鍵型別、長度必須與父表主鍵完全一致。
查看表結構
| 命令 | 用途 | 輸出重點 |
DESCRIBE tbl / DESC tbl | 基本結構 | Field, Type, Null, Key, Default, Extra |
SHOW CREATE TABLE tbl | 完整定義 | 含約束、引擎、字元集、分區、自增值 |
修改表:ALTER TABLE
| 操作 | 語法 | 說明 |
| 改表名 | ALTER TABLE old_name RENAME [TO] new_name; | TO 可省略 |
| 改欄位名 | ALTER TABLE tbl CHANGE old_col new_col new_type [constraints]; | 需重新指定完整型別與約束 |
| 改資料型別 | ALTER TABLE tbl MODIFY col new_type [constraints]; | 不改名時用 MODIFY |
| 新增欄位 | ALTER TABLE tbl ADD col type [constraints] [FIRST | AFTER col2]; | 可指定位置 |
| 刪除欄位 | ALTER TABLE tbl DROP col; | 資料永久遺失 |
| 調整欄位順序 | ALTER TABLE tbl MODIFY col type FIRST | AFTER col2; | 僅影響顯示順序 |
| 變更儲存引擎 | ALTER TABLE tbl ENGINE=new_engine; | 大表慎用,會全表重建 |
| 刪除外鍵 | ALTER TABLE tbl DROP FOREIGN KEY fk_name; | 需指定外鍵名稱(非欄位名) |
刪除表:DROP TABLE
-- 普通表
DROP TABLE table_name;
-- 被引用的父表(兩種方式)
-- 方式一:先刪子表再刪父表
DROP TABLE child_table;
DROP TABLE parent_table;
-- 方式二:先刪外鍵再刪父表(推薦)
ALTER TABLE child_table DROP FOREIGN KEY fk_name;
DROP TABLE parent_table;
進階特性補充
- 分區表:
PARTITION BY RANGE/LIST/HASH/KEY,大表管理利器。
- 生成欄 (5.7+):
col INT GENERATED ALWAYS AS (expr) VIRTUAL/STORED。
- 隱藏欄位 (8.0+):
INVISIBLE,不顯示於 SELECT *。
- CHECK 約束 (8.0.16+):
CONSTRAINT chk CHECK (age > 0) 終於強制生效。
DDL 執行影響與線上變更建議
- MySQL 5.6+ 多數 DDL 支援
ALGORITHM=INPLACE、LOCK=NONE,減少鎖定。
- 大表變更(加欄位、改型別、加索引、換引擎)建議使用 pt-online-schema-change 或 gh-ost。
- 變更前必備:
mysqldump --no-data 結構備份、驗證回滾腳本。
掌握 DDL 核心語法與約束設計原則,是資料庫架構師與後端工程師的必修功課。善用 SHOW CREATE TABLE 審視完整定義,配合線上變更工具,讓資料庫結構演進安全、可控、無感知。
- 上一篇文章: Windows 下 MySQL 5.7.3 安裝配置圖文教學(安裝版)
- 下一篇文章: MySQL 資料型別驗證實測:CHAR、VARCHAR、TEXT、DECIMAL 存儲特性深度解析
Copyright ©
程式碼之家 All Rights Reserved