Mysql 如何验证引入外键约束是否成功';不要引起问题
我有两个表,表A和表B。表A有一个名为customerId的列。我想在表B的customerId和表a的customerId之间创建一个外键。我有一个庞大的数据库,在引入外键之前,我想验证表B的所有customerID是否都有到表a的customerID的有效链接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
在引入外键之前,是否有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语句将失败,但不会对数据库产生任何不良影响。