ERROR 1005 (HY000): Can't create table '...' (errno: 150) —— 經典外鍵創建失敗錯誤,官方文檔提示不夠明確,實際多為元數據不匹配。
INT(10) vs INT(11)、TINYINT vs INT、SIGNED vs UNSIGNED。SHOW COLUMNS FROM tbl 核對,GUI 工具可能隱藏長度差異。CREATE INDEX idx_col ON parent_tbl(col);CONSTRAINT fk_unique_name FOREIGN KEY ...ALTER TABLE tbl ENGINE=InnoDB;ON DELETE CASCADE 或列允許 NULL。CHARSET/COLLATE 必須完全一致。CHARSET=utf8 COLLATE=utf8_general_ci。INDEX(a,b) 只引用 b。REFERENCES、括號不匹配等。INT,外鍵 CHAR
ALTER TABLE child_tbl
ADD CONSTRAINT fk_child_parent
FOREIGN KEY (parent_id) REFERENCES parent_tbl(id)
ON DELETE CASCADE ON UPDATE CASCADE
ENGINE=INNODB DEFAULT CHARSET=utf8;
關鍵點:
ENGINE=INNODBDEFAULT CHARSET=utf8(與主表一致)SHOW CREATE TABLE parent_tbl; SHOW CREATE TABLE child_tbl; 對比ENGINE=InnoDBCHARSET/COLLATE 完全一致