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


要理解錯誤1452,我們首先需要建立一個表,並藉助外部索引鍵約束將其與另一個表關聯。

建立第一個表:

mysql> CREATE table ForeignTable
-> (
-> id int,
-> name varchar(200),
-> Fk_pk int
-> );
Query OK, 0 rows affected (0.43 sec)

成功建立第一個表後,我們將建立第二個表:

mysql> CREATE table primaryTable1
-> (
-> Fk_pk int,
-> DeptName varchar(200),
-> Primary key(Fk_pk)
-> );
Query OK, 0 rows affected (0.48 sec)

現在,我們已經建立了兩個表。然後,這兩個表透過ALTER命令以及新增外部索引鍵約束來關聯。語法如下:

alter table yourFirstTable add constraint anyConstraintName foreign key(column_name which is
acts foreign key in second table) yourSecondTable(column_name which acts primary key in
second table).

現在,上面的查詢用於關聯這兩個表。如下所示:

mysql> alter table ForeignTable add constraint constFKPK foreign key(Fk_pk) references
primaryTable1(Fk_pk);
Query OK, 0 rows affected (1.57 sec)
Records: 0 Duplicates: 0 Warnings: 0

現在,兩個表都已關聯。記錄插入到表“foreignTable”中,如下所示:

mysql> INSERT into ForeignTable values(1,'John',1);

這導致出現如下輸出所示的錯誤:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
(`business`.`foreigntable`, CONSTRAINT `constFKPK` FOREIGN KEY (`Fk_pk`)
REFERENCES `primarytable1` (`fk_pk`))

在上面的輸出中,我們得到了錯誤“無法新增或更新子行:外部索引鍵約束失敗”。我們可以透過將記錄插入到primaryTable1表中來消除此錯誤,如下所示:

mysql> INSERT into primaryTable1 values(1,'ComputerScience');
Query OK, 1 row affected (0.14 sec)

將記錄插入到primaryTable1表中後,我們可以將所需記錄插入到ForeignTable表中,而不會出現任何錯誤。如下所示:

mysql> INSERT into ForeignTable values(1,'John',1);
Query OK, 1 row affected (0.13 sec)

現在,我們可以使用select命令顯示ForeignTable表的記錄,如下所示:

mysql> SELECT * from ForeignTable;

上面查詢的輸出為:

+------+------+-------+
| id   | name | Fk_pk |
+------+------+-------+
| 1    | John | 1     |
+------+------+-------+
1 row in set (0.00 sec)

我們也可以使用select命令顯示primarytable1表的記錄,如下所示:

mysql> SELECT * from primarytable1;

上面查詢的輸出為:

+-------+-----------------+
| Fk_pk | DeptName        |
+-------+-----------------+
| 1     | ComputerScience |
+-------+-----------------+
1 row in set (0.00 sec)

**錯誤1452** - 無法新增或更新子行:外部索引鍵約束失敗,發生在資料記錄最初插入到ForeignTable時。

Note: First, add the record into the second table i.e primarytable1 to avoid the above error.

更新於:2020年6月24日

7K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

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