Mysql 查找外键约束失败的行
在尝试向两个非常大的表添加外键约束时,出现了错误Mysql 查找外键约束失败的行,mysql,sql,foreign-keys,foreign-key-relationship,Mysql,Sql,Foreign Keys,Foreign Key Relationship,在尝试向两个非常大的表添加外键约束时,出现了错误 SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails 这通常是由于主表中的某些数据不存在于外部表中,通常我会检查已知的异常,如空值、超出范围的值等,一旦处理完这些,我就可以满足约束。然而,这一次问题更加微妙 我想知道的是,是否有任何方法可以查询导致约束失败的所有行
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails
这通常是由于主表中的某些数据不存在于外部表中,通常我会检查已知的异常,如空值、超出范围的值等,一旦处理完这些,我就可以满足约束。然而,这一次问题更加微妙
我想知道的是,是否有任何方法可以查询导致约束失败的所有行???假设您有下表和FK关系
parent(parent_id (PK), name)
child(child_id, name, parent_id (FK));
您可以使用以下左联接查找父
表中缺少但在子
表中存在的行:
SELECT child.parent_id
FROM child LEFT JOIN parent ON child.parent_id = parent.parent_id
WHERE parent.parent_id IS NULL;
InoS Heo的解决方案将起作用。这是另一种方法
SELECT *
FROM child
WHERE NOT key IN (
SELECT key
FROM parent
);
当然,键
是您打算稍后对其进行约束的目标字段。谢谢。这是可行的,我在发布之前也尝试过类似的方法,但可能遗漏了一些内容。@manquery谢谢,您可以使用3种不同的方法来完成<代码>左连接
(我的),不在
(块状),不存在
。但是,我想左连接比其他连接要快。我刚才提到了同样的速度。我想加入是实现这一目标的最佳方式。@manquery我同意你的看法;-)FWIW,这在Oracle数据库12c(Rel.12.2.0.1.0)上运行良好。谢谢。。您的解决方案更简单,但对于我的大桌子组,它似乎更慢