首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 外鍵建立失敗錯誤 1005 常見原因彙總

     編輯:MySQL 資料庫相關知識

執行 ALTER TABLE ... ADD FOREIGN KEY 時若出現 ERROR 1005 (HY000): Can't create table ... (errno: 150),請依序排查以下 6 大常見原因:

  1. 儲存引擎非 InnoDB
    外鍵僅支援 InnoDB。確認兩張表皆為 ENGINE=InnoDB:
    SHOW TABLE STATUS WHERE Name='table_name';
  2. 參考欄位無索引
    父表被參考欄位(通常是主鍵或唯一鍵)必須有索引,子表外鍵欄位也需建立索引。
  3. 資料型別不一致
    父表與子表對應欄位的型別、長度、正負號、字元集、校對規則必須完全相同(連 UNSIGNED 都要一致)。
  4. 字元集/校對規則不一致
    即使型別相同,CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci vs utf8_general_ci 也會導致失敗。
  5. 父表缺少被參考的列或索引
    確認父表確實存在該欄位且已建立索引。
  6. 資料已存在違反外鍵的記錄
    子表已有父表不存在的值,需先清理資料再建立外鍵。

快速診斷指令

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 錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved