我有一个名为MySQL
的{{1}}表,其中User
是主键。当有人试图删除用户时,我需要查看该用户是否在其他表上被引用。我不想做十几个不同的查询,并想知道是否有一些userid
级别检查。
我知道你可以找到哪些表引用了一列,但是有没有办法添加哪条记录?
获取哪些表引用此表/列
information_schema
答案 0 :(得分:1)
根据您的问题,在我看来,这可能是供应商数据库。在我工作的供应商数据库中,我花了很多天时间搜索数据库,寻找外国参考资料。遗憾的是,我没有找到一种动态的方式来查找每个插入/更新/删除的所有外部引用,如果你可以疯狂向导自动执行此操作,那很可能是比多个语句更昂贵,以涵盖每个表。
如果数据库的设计并非疯狂,那么外国列可能都使用相同的userid名称(如果是这样的话,那就是BIG)。您可以搜索information_schema,查找名称为userid的所有列。这将提供一个表列表,以便更密切地检查外部引用。要建立一个更广泛的网络,而不是把NAME =' userid'在WHERE子句中使用NAME LIKE'%userid%'。
我在这些实例中使用的另一种策略是数据库比较工具。作为一名SQL Server人员,我只使用了Visual Studio的内置工具,因此我没有针对MySQL的任何具体建议。无论如何,除非您的生产数据库活动很少,否则请对数据库进行两次备份。将两台服务器还原到不同的名称(例如' test_vanilla'和' test_change')。将您的应用程序指向' test_change'数据库,删除用户,对两个数据库运行比较工具,看看有什么变化。这将显示删除操作中遇到的表。这可能是最乏味的,但也会给你最明确和准确的结果。
希望这能指出你正确的方向。祝你好运!