ERROR 1005 (HY000): Can't create table 'xxx.frm' (errno: 150)
-- 或
ERROR 1005: Can't create table
執行 SHOW ENGINE INNODB STATUS 可見 LATEST FOREIGN KEY ERROR 詳細描述。
外鍵欄位與被引用主鍵**必須完全一致**:類型、長度、符號 (signed/unsigned)、字符集、排序規則。
CREATE TABLE booktype (
btid INT(5) UNSIGNED ZEROFILL AUTO_INCREMENT PRIMARY KEY,
btname VARCHAR(100) NOT NULL UNIQUE
);
CREATE TABLE books (
bid INT(5) UNSIGNED ZEROFILL AUTO_INCREMENT PRIMARY KEY,
btid INT, -- 缺少 UNSIGNED ZEROFILL
FOREIGN KEY (btid) REFERENCES booktype(btid)
);
修復:btid INT(5) UNSIGNED ZEROFILL 完全對齊。
CREATE TABLE products (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100)
) ENGINE=InnoDB;
CREATE TABLE line_items (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
product_id INT NOT NULL,
CONSTRAINT fk_items_product FOREIGN KEY (product_id) REFERENCES products(id)
-- 缺少 INDEX(product_id) (舊版需手動)
) ENGINE=InnoDB; -- 必須指定
修復:
1. 兩表均 ENGINE=InnoDB。
2. 子表加 INDEX (product_id) (或 KEY)。
InnoDB。PRIMARY KEY 或 UNIQUE KEY。InnoDB。INDEX/KEY)。CONSTRAINT fk_name)。SHOW ENGINE INNODB STATUS\G
-- 輸出中搜尋
------------------------
LATEST FOREIGN KEY ERROR
------------------------
... 具體不匹配細節 ...
ERROR 1005 (errno 150) 99% 為**類型不匹配**或**引擎/索引缺失**。逐項對齊定義、強制 InnoDB、補全索引即可解決。