首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 刪除外鍵報錯 errno 152 / 150 解決方法與正確流程

     編輯:MySQL 綜合教學

MySQL 刪除外鍵報錯 errno 152 / 150 解決方法與正確流程

MySQL 刪除外鍵時常見 ERROR 1025 (errno: 152) 或建立外鍵 errno: 150,實為外鍵名稱錯誤或欄位定義不符,錯誤訊息極具誤導性。

錯誤現象

ALTER TABLE ruler.test2child DROP FOREIGN KEY test;
-- ERROR 1025: Error on rename of './ruler/test2child' to './ruler/#sql2-298-8f' (errno: 152)

真正原因查看方式

SHOW ENGINE INNODB STATUS;
-- LATEST FOREIGN KEY ERROR
-- Cannot find a constraint with the given id "test".

正確刪除外鍵步驟

  1. 查詢實際外鍵名稱:
    SHOW CREATE TABLE table_name;
  2. 使用正確名稱刪除:
    ALTER TABLE table_name DROP FOREIGN KEY `實際外鍵名稱`;
  3. 再刪除欄位(如需):
    ALTER TABLE table_name DROP COLUMN `column_name`;

完整範例

-- 正確做法(官方建議順序)
ALTER TABLE task DROP FOREIGN KEY FK_Reference_7;
ALTER TABLE task DROP COLUMN `assigned`;

建立外鍵常見 errno: 150 原因

SHOW ENGINE INNODB STATUS;
-- You have defined a SET NULL condition though some of the columns are defined as NOT NULL.
  • 參考欄位型別不一致(INT vs BIGINT、CHARSET 不同)
  • 參考欄位無索引
  • ON DELETE SET NULL 但欄位定義 NOT NULL
  • 父表非 InnoDB 引擎

測試環境

MySQL 5.2.0-falcon-alpha-community-nt(現代版本行為一致)

核心提醒

MySQL 外鍵錯誤訊息極不友善,務必用 SHOW ENGINE INNODB STATUS 看真實原因,不要被 errno: 150/152 誤導。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved