1

我有一个相当大的关系数据库,并且正在处理管理后端。我想知道哪些表引用了一个特定表中的列。

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

额外的问题:是否有使用 phpmyadmin 获取此信息的内置方法?

4

2 回答 2

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 子句中的字符串常量(如果您有循环外键,请注意不要进入无限循环) .

于 2013-07-02T22:43:27.313 回答
1

能不能把数据库中的Schema读入MySQL Workbench,然后用工具画出表之间的关系?我自己没有尝试过,因为我在 MySQL Workbench 中进行设计,然后进行映射等......然后导出到 MySQL 以创建数据库。

于 2013-07-03T13:12:46.560 回答