執行 ALTER TABLE ... ADD FOREIGN KEY 時若出現 ERROR 1005 (HY000): Can't create table ... (errno: 150),請依序排查以下 6 大常見原因:
ENGINE=InnoDB:SHOW TABLE STATUS WHERE Name='table_name';UNSIGNED 都要一致)。CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci vs utf8_general_ci 也會導致失敗。SHOW ENGINE INNODB STATUS;
-- 查看 LATEST FOREIGN KEY ERROR 區塊可得知具體原因
CREATE TABLE parent (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE child (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
parent_id INT UNSIGNED NOT NULL,
INDEX idx_parent (parent_id),
CONSTRAINT fk_child_parent FOREIGN KEY (parent_id) REFERENCES parent(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
逐項對照上述清單,即可解決 99% 的 1005 錯誤。