Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查找外键约束失败的行_Mysql_Sql_Foreign Keys_Foreign Key Relationship - Fatal编程技术网

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)上运行良好。谢谢。。您的解决方案更简单,但对于我的大桌子组,它似乎更慢