在 MySQL 中創建外鍵約束時,報錯 ERROR 1215 (HY000): Cannot add foreign key constraint 是家常便飯。本文彙總 8 大高頻成因,附帶檢查指令,助你快速定位解決。
INT(10) vs INT(11)、INT vs TINYINT、SIGNED vs UNSIGNED 皆不匹配;SHOW CREATE TABLE parent_table;SHOW CREATE TABLE child_table;col_name 定義。PRIMARY KEY 或擁有獨立索引;ALTER TABLE parent_table ADD INDEX idx_col (col);ALTER TABLE t ENGINE=InnoDB;;SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='FOREIGN KEY';;CONSTRAINT fk_unique_name FOREIGN KEY ... 或加隨機後綴測試。ON DELETE SET NULL,子表外鍵列必須允許 NULL;ALTER TABLE child_table MODIFY col_name type NULL; 或改用 ON DELETE CASCADE / RESTRICT。CHARSET 與 COLLATION 必須完全一致;SHOW TABLE STATUS LIKE 't';、SHOW FULL COLUMNS FROM t;;ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;DEFAULT 0);ALTER TABLE child_table ALTER COLUMN col_name DROP DEFAULT;ALTER TABLE child_table
ADD CONSTRAINT fk_name
FOREIGN KEY (col_name)
REFERENCES parent_table (col_name)
ON DELETE RESTRICT ON UPDATE CASCADE;ON DELETE/UPDATE 與列屬性相容;DEFAULT;工具建議:使用 MySQL Workbench、Navicat、DBeaver 等圖形化工具設計表結構,可自動檢測大部分問題,大幅降低人為錯誤率。