查找外键约束失败的行

Man*_*uer 16 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
Run Code Online (Sandbox Code Playgroud)

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

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

Jas*_*Heo 27

假设你有下表和FK关系.

parent(parent_id (PK), name)
child(child_id, name, parent_id (FK));
Run Code Online (Sandbox Code Playgroud)

您可以使用以下内容找到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;
Run Code Online (Sandbox Code Playgroud)


小智 11

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

SELECT *
FROM child
WHERE NOT key IN (
    SELECT key
    FROM parent
);
Run Code Online (Sandbox Code Playgroud)

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