約束是保證數據完整性的核心機制。MySQL 支援五大約束類型,本文結合圖示與實戰 SQL 逐一解析。
強制列不能為 NULL。
CREATE TABLE t_user (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);

AUTO_INCREMENT 自增CREATE TABLE t_user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50)
);

CREATE TABLE t_user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
email VARCHAR(100) UNIQUE
);

插入重複 email 會報錯:Duplicate entry 'test@test.com' for key 'email'

插入數據時未指定該列,自動填充默認值。
CREATE TABLE t_user (
id INT PRIMARY KEY AUTO_INCREMENT,
sex TINYINT DEFAULT 3 -- 0:女 1:男 3:未知
);

插入時不指定 sex,自動存 3:

[mysqld]
default-storage-engine=INNODB
-- 父表
CREATE TABLE province (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
) ENGINE=INNODB;
-- 子表
CREATE TABLE city (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
pid INT,
FOREIGN KEY (pid) REFERENCES province(id)
) ENGINE=INNODB;

| 動作 | 說明 |
|---|---|
| CASCADE | 級聯:父表刪除/更新,子表匹配行同步刪除/更新 |
| SET NULL | 置空:父表刪除/更新,子表外鍵列設為 NULL(需列允許 NULL) |
| RESTRICT | 限制:拒絕父表刪除/更新(有子表引用時) |
| NO ACTION | 標準 SQL 關鍵字,MySQL 中等同 RESTRICT |


id INT PRIMARY KEYCONSTRAINT fk_pid FOREIGN KEY (pid) REFERENCES province(id),支援組合鍵、約束命名合理使用約束能在數據庫層面攔截髒數據,減少應用層判邏輯。主鍵、唯一、外鍵是業務建模的三大基石,DEFAULT 提升寫入便利性,NOT NULL 是數據質量的第一道防線。