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

MySQL 外鍵建立失敗:Cannot add or update a child row 錯誤分析與解決

     編輯:程式設計綜合問答

錯誤場景

ALTER TABLE emp
ADD CONSTRAINT id_fk FOREIGN KEY (deptno) REFERENCES Dept (deptno);

報錯:
Cannot add or update a child row: a foreign key constraint fails ...

錯誤原因

emp 表中已存在的 deptno 值,在 Dept 表中找不到對應的主鍵值。
外鍵約束要求:子表(emp)的外鍵欄位每一個非 NULL 值,必須在父表(Dept)的主鍵欄位中存在。

排查步驟

  1. 檢查父表資料:SELECT deptno FROM Dept;
  2. 找出子表中不合法的值:
    SELECT e.deptno FROM emp e LEFT JOIN Dept d ON e.deptno = d.deptno WHERE d.deptno IS NULL;
  3. 處理不合法資料:
      – 修正為有效 deptno
      – 或將不合法列的 deptno 設為 NULL(若欄位允許)
      – 或刪除該列資料
  4. 清理後再次執行 ALTER TABLE 即可成功。

常見誤區

  • 以為外鍵只約束「未來插入」,忽略了「現有資料」也必須滿足約束。
  • 父表主鍵與子表外鍵資料型別、長度、字元集不一致(如 INT vs VARCHAR、utf8 vs latin1)。
  • 父表未建立主鍵或唯一索引(MySQL 要求被參考欄位必須有索引)。

總結

外鍵建立失敗 99% 是因為現有子表資料不符合參考完整性。先清洗資料,再加約束,順序不能反。

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