MySQL找到无效的外键

时间:2012-08-10 18:12:03

标签: mysql foreign-keys

我们有一个包含几百个表的数据库。使用foreign_keys的表使用INNODB。

有时我们会在开发,阶段和生产数据库之间传输数据(使用mysqldump的单个表)。 mysqldump禁用所有外键检查,以便轻松导入数据。

因此,随着时间的推移,我们的一些非生产数据库最终会出现一些孤立的记录。

我正准备编写一个脚本来查找和检测整个MySQL数据库的任何无效(指向丢失记录的键)外键。

我知道我可以编写一个查询来逐个检查每个表和fkey,但是他们认为可能有一个工具可以做到这一点。

我会在写这样一个脚本之前检查一下,看看那里是否有一个。

搜索了一下谷歌......令人惊讶的是我一无所获。

2 个答案:

答案 0 :(得分:16)

如果数据已经存在并且您没有设置fk约束或级联来删除父级,那么您只需要:

SELECT * FROM children WHERE my_fk_id NOT IN (select id from parents);

答案 1 :(得分:4)

我创建了一个简单的ruby脚本来处理这个问题。

https://github.com/michaelirey/mysql-foreign-key-checker

希望这可以帮助遇到与我同样问题的人。