MySQL 错误 1452 - 无法添加或子行:外键约束失败

要了解错误 1452,首先我们需要创建一个表,并借助外键约束将其与另一个表相关联。

创建第一个表 -

mysql> CREATE table ForeignTable

-> (

-> id int,

-> name varchar(200),

-> Fk_pk int

-> );

成功创建第一个表后,我们将创建第二个表 -

mysql> CREATE table primaryTable1

-> (

-> Fk_pk int,

-> DeptName varchar(200),

-> Primary key(Fk_pk)

-> );

现在,我们已经创建了两个表。然后这两个表都在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);

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');

将记录插入到表primaryTable1 后,我们可以将所需的记录插入到表ForeignTable 中,不会出现任何错误。这如下所示 -

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

现在,我们可以在 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 tablei.eprimarytable1 to avoid the above error.

以上是 MySQL 错误 1452 - 无法添加或子行:外键约束失败 的全部内容, 来源链接: utcz.com/z/360622.html

回到顶部