gpt4 book ai didi

mysql - 从具有特定外键的其他表获取记录

转载 作者:行者123 更新时间:2023-11-29 10:30:07 25 4
gpt4 key购买 nike

我有一个名为 UserMySQL 表,其中 userid 是主键。当有人尝试删除用户时,我需要查看其他表是否引用了该用户。我不想进行十几个不同的查询,也不想知道是否有一些 information_schema 级别的检查。

我知道您可以找到哪些表引用了列,但是有没有办法添加引用的记录?

获取哪些表引用此表/列

SELECT *
FROM
information_schema.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_NAME = 'User'
AND REFERENCED_COLUMN_NAME = 'userid';

最佳答案

根据你的问题,在我看来这可能是一个供应商数据库。我花了很多很多天的时间在我工作的供应商数据库中搜索数据库寻找外国引用资料。不幸的是,我发现没有一种动态的方法来寻找每个插入/更新/删除的所有外部引用,如果你可以疯狂地向导一些东西来自动执行此操作,那么它很可能比多个语句要昂贵得多覆盖每张 table 。

如果数据库的设计不疯狂,很可能外部列都使用相同的 userid 名称(这是一个很大的假设)。您可以搜索 information_schema 来查找名称为 userid 的所有列。这将提供一个表格列表,以便更仔细地检查外国引用资料。要撒更广的网,请不要将 NAME='userid' 放在 WHERE 子句中,而应使用 NAME LIKE '%userid%'。

我在这些情况下使用的另一个策略是数据库比较工具。作为一个 SQL Server 人员,我只使用过 Visual Studio 的内置工具,因此我对 MySQL 没有任何具体的建议。无论如何,除非您的生产数据库事件很少,否则请对数据库进行两次备份。将两者恢复到服务器上的不同名称(例如“test_vanilla”和“test_change”)。将您的应用程序指向“test_change”数据库,删除用户,对两个数据库运行比较工具并查看发生了什么变化。这将显示在删除操作中哪些表被命中。这可能是最乏味的,但也会给您最明确和准确的结果。

希望这能为您指明正确的方向。祝你好运!

关于mysql - 从具有特定外键的其他表获取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47565044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com