Mysql 如何验证引入外键约束是否成功';不要引起问题

Mysql 如何验证引入外键约束是否成功';不要引起问题,mysql,join,foreign-keys,subquery,left-join,Mysql,Join,Foreign Keys,Subquery,Left Join,我有两个表,表A和表B。表A有一个名为customerId的列。我想在表B的customerId和表a的customerId之间创建一个外键。我有一个庞大的数据库,在引入外键之前,我想验证表B的所有customerID是否都有到表a的customerID的有效链接 在引入外键之前,是否有SQL查询来查看任何恶意数据 您可以像这样取出违规记录: select tb.* from tableb tb left join tablea ta on ta.customerId = tb.customer

我有两个表,表A和表B。表A有一个名为customerId的列。我想在表B的customerId和表a的customerId之间创建一个外键。我有一个庞大的数据库,在引入外键之前,我想验证表B的所有customerID是否都有到表a的customerID的有效链接


在引入外键之前,是否有SQL查询来查看任何恶意数据

您可以像这样取出违规记录:

select tb.*
from tableb tb
left join tablea ta on ta.customerId = tb.customerId
where ta.customerId is null
这将为您提供
tableb
customerId
tablea
中不存在的所有记录

或不存在具有

select tb.*
from tableb tb
where not exists (select 1 from tablea ta where ta.customerId = tb.customerId)
有时只列出缺少的
客户ID是很方便的:

select tb.customerId, count(*) impacted_records
from tableb tb
where not exists (select 1 from tablea ta where ta.customerId = tb.customerId)
group by tb.customerId

在两个表之间进行左连接。如果你做一个左连接B,你会得到所有a记录,B上有一个值或NULL,反之亦然,只要试着把FK装箱。在最坏的情况下,ALTER语句将失败,但不会对数据库产生任何不良影响。