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

标签 mysql sql

我有一个名为 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/

相关文章:

javascript - 通过 Ajax 发布到 MySql 的问题

mysql - 按日期和时间存储在两个不同的列mysql中

php - 如何从上次交易中获取值(value),但不从今天的交易中获取值(value)

mysql - 如何将 int 数字转换为时间 - SQL

mysql - 将列数据复制到另一列的正确mysql语法是什么

php - 如何获取 SQL 选择查询返回的行数?

MySQL 根据上一行和下一行选择行

sql - Sequelize 过滤器嵌套包含

mysql - 为什么我不能永久更改 sql_mode?

mysql - 如何确定 SQL 查询何时结束?