我有一个非常大的关系数据库,我正在研究管理员后端。我想知道哪些表引用了一个特定表中的列。
例如:假设我有一个以products
作为主索引的表id
。我可以有很多引用此索引的表,例如orders
表,user_bookmarks
表和product_reviews
表。如果我想删除特定产品,我首先需要对其他表做一些工作 - 简单的“级联”或“删除”指令是不够的。如何让MySQL确切地告诉我哪些表引用了products.id
索引?
奖金问题:是否有使用phpmyadmin获取此信息的内置方式?
答案 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来创建数据库。