如何查看整个数据库中的哪些列将一个特定列作为外键引用?就像一个“反向”外键?

时间:2013-07-02 22:38:59

标签: mysql phpmyadmin foreign-keys

我有一个非常大的关系数据库,我正在研究管理员后端。我想知道哪些表引用了一个特定表中的列。

例如:假设我有一个以products作为主索引的表id。我可以有很多引用此索引的表,例如orders表,user_bookmarks表和product_reviews表。如果我想删除特定产品,我首先需要对其他表做一些工作 - 简单的“级联”或“删除”指令是不够的。如何让MySQL确切地告诉我哪些表引用了products.id索引?

奖金问题:是否有使用phpmyadmin获取此信息的内置方式?

2 个答案:

答案 0 :(得分:1)

SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE (REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME) = ('mydatabase', 'products')

重新评论:

MySQL不支持递归查询,所以很遗憾没有办法在单个查询中找到完整的外键图。您可以做的最好是针对上述查询的每个结果,再次运行查询,将TABLE_SCHEMA和TABLE_NAME替换为WHERE子句中的字符串常量(如果您有圆形外键,请注意不要进入无限循环)

答案 1 :(得分:1)

您是否可以将数据库中的Schema读入MySQL Workbench,然后使用该工具绘制表格之间的关系?我自己没有尝试过这个,因为我在MySQL Workbench中进行设计,然后是映射等...然后导出到MySQL来创建数据库。