查找外键约束失败的行

时间:2013-12-05 04:47:42

标签: 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

这通常是由于主表中的某些数据不存在于外表中,通常我检查已知的异常,如空值,超出范围值等,一旦这些被处理,我可以得到约束满足。不过这次问题更加微妙。

我想知道有没有办法查询导致约束失败的所有行?

2 个答案:

答案 0 :(得分:26)

假设您有以下表格和FK关系。

parent(parent_id (PK), name)
child(child_id, name, parent_id (FK));

您可以使用以下parent找到child表中缺少但在LEFT JOIN表中的哪些行:

SELECT child.parent_id
FROM child LEFT JOIN parent ON child.parent_id = parent.parent_id
WHERE parent.parent_id IS NULL;

答案 1 :(得分:11)

InoS Heo的解决方案将起作用。这是另一种方式。

SELECT *
FROM child
WHERE NOT key IN (
    SELECT key
    FROM parent
);

当然key是您打算稍后设置约束的目标字段。