【问题标题】:MySQL add row from child row if not exists in parent table with error 1452如果父表中不存在 MySQL 从子行添加行,错误 1452
【发布时间】:2017-08-14 14:09:51
【问题描述】:

我有两张这样的表:

CREATE TABLE parentTable(
pID    INT,
ArtNr  INT,
Name   VARCHAR(50),
PRIMARY KEY(ID),
UNIQUE KEY (ArtNr)
);

CREATE TABLE childTable(
cID       INT,
ArtNr     INT,
Name      VARCHAR(50),
UNIQUE KEY (ArtNr),
FOREIGN KEY (ArtNr) REFERENCES parentTable(ArtNr) ON UPDATE CASCADE ON DELETE CASCADE
);

现在我遇到的问题是,如果在我的 parentTable 中找不到带有 ArtNr 的 childTable 中的条目,我会收到以下错误消息:

1452 Cannot add or update a child row: a foreign key constraint fails (`sys`.`childTable`, CONSTRAINT `childTable_ibfk_1` FOREIGN KEY (`ArtNr`) REFERENCES `parentTable` (`ArtNr`) ON DELETE CASCADE ON UPDATE CASCADE)

我想要做的是,如果在我的 parentTable 中找不到 childTable 中的条目,则添加该行。有可能吗?

【问题讨论】:

  • 你想要什么?您已经创建了外键约束。而现在,试图避免它。
  • 没有。我只想将缺少的条目添加到父表中
  • 看看答案(第 2 部分)。

标签: mysql foreign-keys mysql-error-1452


【解决方案1】:

您可以使用服务器变量 FOREIGN_KEY_CHECKS 来打开/关闭外键值检查。

例如:

SET FOREIGN_KEY_CHECKS=0;

// ...
// your script...
// ...

SET FOREIGN_KEY_CHECKS=1;

更多信息 - foreign_key_checks


您可以使用此查询找到丢失的条目 -

SELECT c.* FROM child c
LEFT JOIN parent p
  ON p.id = c.id
WHERE p.id IS NULL;

然后将这组 ID 插入到父表中。在INSERT..SELECT 声明的帮助下完成。

【讨论】:

  • 谢谢,但这无助于添加缺失的条目
  • 显示完整的脚本。
  • 谢谢你.. 有了这个声明,我发现了丢失的条目
猜你喜欢
  • 2012-02-06
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多