如何知道表之间的关系
How to know relations between tables
我在 MySQL 中有一个由某人创建的数据库。我没有数据库的任何文档。
如何知道表之间的关系?
是否有任何查询或程序可以生成报告以便于查找关系?
我可以查看 Schema 信息并手动找出它,但如果我可以生成关系报告就更好了。
你可以看看information_scheme.KEY_COLUMN_USAGE
table
正如所建议的那样,有一种使用 KEY_COLUMN_USAGE 视图快速列出 FK(外键引用)的方法:
SELECT CONCAT( table_name, '.',
column_name, ' -> ',
referenced_table_name, '.',
referenced_column_name ) AS list_of_fks
FROM information_schema.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = (your schema name here)
AND REFERENCED_TABLE_NAME is not null
ORDER BY TABLE_NAME, COLUMN_NAME;
您可以通过执行以下步骤在 MySql Workbench 中获得概览:
- 转到 "Database" 菜单选项。
- Select "Reverse Engineer" 选项。
- 将打开一个向导并生成显示的 EER 图
从编程的角度来说,更好的方法是从 INFORMATION_SCHEMA.KEY_COLUMN_USAGE
table 收集数据,如下所示:
SELECT
`TABLE_SCHEMA`, -- Foreign key schema
`TABLE_NAME`, -- Foreign key table
`COLUMN_NAME`, -- Foreign key column
`REFERENCED_TABLE_SCHEMA`, -- Origin key schema
`REFERENCED_TABLE_NAME`, -- Origin key table
`REFERENCED_COLUMN_NAME` -- Origin key column
FROM
`INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE` -- Will fail if user don't have privilege
WHERE
`TABLE_SCHEMA` = SCHEMA() -- Detect current schema in USE
AND `REFERENCED_TABLE_NAME` IS NOT NULL; -- Only tables with foreign keys
还有一个是
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
你有SELECTs
使用数据库的吗? 那 可能是关系的最佳来源。
如果您使用的是 phpmyadmin,那么:
- 转到数据库。
- Select table 并转到其结构。
- 您会在 table 结构的底部找到关系视图。
如果您只安装 mysql workbench。( refers to),可能还有一个更有价值的选择
并尝试 "Create EER models from database" 。你一定能看到表之间的关系。
试试 SchemaSpy (http://schemaspy.sourceforge.net/):
SchemaSpy is a Java-based tool (requires Java 5 or higher) that analyzes the metadata of a schema in a database and generates a visual representation of it in a browser-displayable format.
这是 http://schemaspy.sourceforge.net/sample/ 示例输出的 HTML 页面的屏幕截图:
如果您不想使用命令行,还有一个不错的 GUI:
http://schemaspygui.sourceforge.net/
这两个工具都是开源的,在我看来非常轻巧且易于使用。当我处于您描述的情况时,我多次使用它们:获得模式的概述,甚至一些细节以深入研究。 (查看 "Anomalies" 报告。)
更新
请务必在 http://schemaspy.org
查看即将推出的 SchemaSpy 版本
最好使用 Mysql workbench。有一个生成 ER 图的选项。如果您使用的是 phpmyadmin select 任何 table。有一个结构选项卡,您可以从中看到 table 结构。希望这会有所帮助。
我在 MySQL 中有一个由某人创建的数据库。我没有数据库的任何文档。
如何知道表之间的关系?
是否有任何查询或程序可以生成报告以便于查找关系?
我可以查看 Schema 信息并手动找出它,但如果我可以生成关系报告就更好了。
你可以看看information_scheme.KEY_COLUMN_USAGE
table
正如所建议的那样,有一种使用 KEY_COLUMN_USAGE 视图快速列出 FK(外键引用)的方法:
SELECT CONCAT( table_name, '.',
column_name, ' -> ',
referenced_table_name, '.',
referenced_column_name ) AS list_of_fks
FROM information_schema.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = (your schema name here)
AND REFERENCED_TABLE_NAME is not null
ORDER BY TABLE_NAME, COLUMN_NAME;
您可以通过执行以下步骤在 MySql Workbench 中获得概览:
- 转到 "Database" 菜单选项。
- Select "Reverse Engineer" 选项。
- 将打开一个向导并生成显示的 EER 图
从编程的角度来说,更好的方法是从 INFORMATION_SCHEMA.KEY_COLUMN_USAGE
table 收集数据,如下所示:
SELECT
`TABLE_SCHEMA`, -- Foreign key schema
`TABLE_NAME`, -- Foreign key table
`COLUMN_NAME`, -- Foreign key column
`REFERENCED_TABLE_SCHEMA`, -- Origin key schema
`REFERENCED_TABLE_NAME`, -- Origin key table
`REFERENCED_COLUMN_NAME` -- Origin key column
FROM
`INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE` -- Will fail if user don't have privilege
WHERE
`TABLE_SCHEMA` = SCHEMA() -- Detect current schema in USE
AND `REFERENCED_TABLE_NAME` IS NOT NULL; -- Only tables with foreign keys
还有一个是
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
你有SELECTs
使用数据库的吗? 那 可能是关系的最佳来源。
如果您使用的是 phpmyadmin,那么:
- 转到数据库。
- Select table 并转到其结构。
- 您会在 table 结构的底部找到关系视图。
如果您只安装 mysql workbench。( refers to),可能还有一个更有价值的选择 并尝试 "Create EER models from database" 。你一定能看到表之间的关系。
试试 SchemaSpy (http://schemaspy.sourceforge.net/):
SchemaSpy is a Java-based tool (requires Java 5 or higher) that analyzes the metadata of a schema in a database and generates a visual representation of it in a browser-displayable format.
这是 http://schemaspy.sourceforge.net/sample/ 示例输出的 HTML 页面的屏幕截图:
如果您不想使用命令行,还有一个不错的 GUI: http://schemaspygui.sourceforge.net/
这两个工具都是开源的,在我看来非常轻巧且易于使用。当我处于您描述的情况时,我多次使用它们:获得模式的概述,甚至一些细节以深入研究。 (查看 "Anomalies" 报告。)
更新
请务必在 http://schemaspy.org
查看即将推出的 SchemaSpy 版本最好使用 Mysql workbench。有一个生成 ER 图的选项。如果您使用的是 phpmyadmin select 任何 table。有一个结构选项卡,您可以从中看到 table 结构。希望这会有所帮助。