【发布时间】:2012-08-08 01:46:08
【问题描述】:
我们有一个包含几百个表的数据库。使用 foreign_keys 的表使用 INNODB。
有时我们在开发、阶段和生产数据库之间传输数据(使用mysqldump 的各个表)。 mysqldump 禁用所有外键检查以方便导入数据。
因此,随着时间的推移,我们的一些非生产数据库最终会出现一些孤立记录。
我正要编写一个脚本来查找和检测整个 MySQL 数据库的任何无效(指向丢失记录的键)外键。
我知道我可以编写一个查询来逐个检查每个表和 fkey,但我想可能已经有一个工具可以做到这一点。
我会在编写这样的脚本之前检查一下是否已经有一个。
用谷歌搜索了一下......令人惊讶的是我什么也没找到。
【问题讨论】:
-
“无效”是什么意思?孤立的记录?具有指向不再存在的表的 FK 的表?
-
您可以让您的数据库自动执行此操作(取决于您使用的数据库引擎)并将其设置为 ON DELETE CASCADE,以便维护引用完整性。
-
除了 stefans 的评论之外,请注意您可以取消孩子或更新它,您不必删除它。
-
是的,我所说的无效是指孤立的记录。我将更新我的问题以更简洁。
-
是的,我知道“删除/更新”级联。但是,数据库中已经存在孤立记录。 ON "DELETE/UPDATE" CASCADE 将只处理未来的更新和删除。我会更新我的问题。
标签: mysql foreign-keys