首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MySQL 建立外鍵失敗 (Err 1215) 三大常見原因與排查

     編輯:程式設計疑難解答

錯誤訊息

[Err] 1215 - Cannot add foreign key constraint

SQL 片段

CONSTRAINT `fk_orderdetail_oid` FOREIGN KEY (`oid`) REFERENCES `orders` (`oid`),
CONSTRAINT `fk_orderdetail_fname` FOREIGN KEY (`fname`) REFERENCES `fruit` (`fname`),
CONSTRAINT `fk_orderdetail_fprice` FOREIGN KEY (`fprice`) REFERENCES `fruit` (`fprice`)

三大核心原因

  1. 資料型別不一致:父表 orders.oid 與子表 orderdetail.oid 型別、長度、編碼、是否簽名必須完全相同 (如同為 VARCHAR(20) CHARSET utf8mb4)
  2. 儲存引擎不一致:外鍵僅支援 InnoDB,確認 SHOW TABLE STATUS 兩表 Engine 皆為 InnoDB
  3. 參考欄位非唯一/非索引:父表欄位必須為 PRIMARY KEY 或 UNIQUE KEY,且已建立索引

排查 SQL

-- 1. 檢查型別與編碼
SHOW CREATE TABLE orders;
SHOW CREATE TABLE fruit;
SHOW CREATE TABLE orderdetail;

-- 2. 檢查引擎
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME IN ('orders','fruit','orderdetail');

-- 3. 檢查父表索引
SHOW INDEX FROM orders WHERE Key_name = 'PRIMARY';
SHOW INDEX FROM fruit WHERE Column_name IN ('fname','fprice');

特殊注意

  • fprice 為 DECIMAL(5,2) 作外鍵極不推薦:浮點比較、價格變動導致級聯更新困難
  • 若父表資料已存在,子表插入前必須確保參考值存在
  • 設定 ON DELETE/UPDATE CASCADE|SET NULL|RESTRICT 視業務而定
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved