Mysql 在将复合密钥指定为外键之前,如何对其进行安全检查?

Mysql 在将复合密钥指定为外键之前,如何对其进行安全检查?,mysql,Mysql,因此,通常情况下,当需要在已填充的表上声明外键时,他们将首先确保该外键表中包含创建外键的表中包含的所有值 select * from myschema.Orders where ProductID not in (select ProductID from myschema.Products); 如果从上述查询中返回任何记录,那么DBA将首先处理这些记录,然后再设置外键。但是如果Products表包含一个复合外键呢?如果Products表同时包含

因此,通常情况下,当需要在已填充的表上声明外键时,他们将首先确保该外键表中包含创建外键的表中包含的所有值

    select * from myschema.Orders
        where ProductID not in
            (select ProductID from myschema.Products);
如果从上述查询中返回任何记录,那么DBA将首先处理这些记录,然后再设置外键。但是如果Products表包含一个复合外键呢?如果Products表同时包含ProductID字段和BatchNumber字段作为主键,那么如何进行上述检查

这是假设Orders表也有这两个字段。

在这种情况下,您可以使用NOT EXISTS

大概是这样的:

select *
from myschema.Orders o
where not exists (
        select ProductID
        from myschema.Products p
        where o.ProductID = p.ProductID
            and o.BatchNumber = p.BatchNumber
        );