[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
CREATE TABLE 或 ALTER TABLE。CONSTRAINT symbol 時 MySQL 自動生成名稱。| 動作 | 父表 DELETE/UPDATE 時子表行為 | InnoDB 支持 |
|---|---|---|
| CASCADE | 子表同步刪除/更新匹配行 | ✅ |
| SET NULL | 子表外鍵列置 NULL(列需允許 NULL) | ✅ |
| NO ACTION | 拒絕父表操作(標準 SQL 延遲檢查) | ✅ |
| RESTRICT | 拒絕父表操作(立即檢查,默認行為) | ✅ |
| SET DEFAULT | 子表外鍵列置默認值 | ❌ 不支持 |
注意:未指定 ON DELETE/UPDATE 時默認 RESTRICT。
ON UPDATE CASCADE ON DELETE RESTRICT(父改子跟隨,父刪有子則攔截)。ON UPDATE CASCADE ON DELETE CASCADE(父刪子隨之消失)。ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE ...] [ON UPDATE ...];
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;
提示:fk_symbol 為約束名稱(可通過 SHOW CREATE TABLE 查看),而非索引名或列名。
pt-online-schema-change。ERROR 1005),父子表需保持一致。