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+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告