MySQL錯誤1452 - 無法新增或更新子行:外部索引鍵約束失敗?


每當我們在表之間新增外部索引鍵約束並在子表中插入記錄時,就會出現此錯誤。讓我們來看一個例子。

建立子表。

mysql> create table ChildDemo
   -> (
   -> id int,
   -> FKPK int
   -> );
Query OK, 0 rows affected (0.86 sec)

建立第二個表。

mysql> create table ParentDemo
   -> (
   -> FKPK int,
   -> Name varchar(100)
   -> ,
   -> primary key(FKPK)
   -> );
Query OK, 0 rows affected (0.57 sec)

新增外部索引鍵約束。

mysql> alter table ChildDemo add constraint ConstChild foreign key(FKPK) references ParentDemo(FKPK);
Query OK, 0 rows affected (1.97 sec)
Records: 0  Duplicates: 0  Warnings: 0

建立外部索引鍵約束後,每當我們在第一個表或子表中插入記錄時,都會收到上述錯誤。

mysql> insert into ChildDemo values(1,3);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`business`.`childdemo`, CONSTRAINT `ConstChild` FOREIGN KEY (`FKPK`) REFERENCES `parentdemo` (`fkpk`))

當您嘗試新增在另一個表中沒有匹配行的行時,會發生此錯誤。

如上所述

“外部索引鍵關係涉及一個包含中心資料值的父表,以及一個包含相同值並指向其父表的子表。FOREIGN KEY子句在子表中指定。如果子表中沒有匹配的候選鍵值在父表中,它將拒絕任何嘗試在子表中建立外部索引鍵值的INSERT或UPDATE操作。”

更新於:2023年9月14日

32K+瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.