如何找到所有mysql表之间的所有关系?
如何找到所有MySQL表之间的所有关系?例如,我想知道大约有100个表的数据库中表之间的关系 有人知道这一点吗?试试这个:如何找到所有mysql表之间的所有关系?,mysql,database,relationship,relation,Mysql,Database,Relationship,Relation,如何找到所有MySQL表之间的所有关系?例如,我想知道大约有100个表的数据库中表之间的关系 有人知道这一点吗?试试这个: select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS; 一个选择是:您可以通过逆向工程以图解的方式理解它 当您安装MySQL时,您将获得MySQLWorkbench。您需要打开它并选择要进行反向工程的数据库。单击“工具”或“数据库”菜单下的“反向工程”选项。它将要求您选择表格。要么选择要理解的表,要么选择整个数据库。它将生成
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
一个选择是:您可以通过逆向工程以图解的方式理解它
当您安装MySQL时,您将获得MySQLWorkbench。您需要打开它并选择要进行反向工程的数据库。单击“工具”或“数据库”菜单下的“反向工程”选项。它将要求您选择表格。要么选择要理解的表,要么选择整个数据库。它将生成一个带有关系的图表。从编程角度讲,更好的方法是从信息\u SCHEMA.KEY\u COLUMN\u用法表中收集数据,如下所示:
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
根据您的目的,有更多的信息列(如序号位置)可能会很有用
更多信息:试试看
挑选
`表_名称`,
`列名称`,
`引用的\u表\u名称`,
`引用的列名称`
来自'information\u schema'。'KEY\u COLUMN\u用法'
其中'CONSTRAINT\u SCHEMA`='YOUR\u DATABASE\u NAME'和
`引用的_表_架构`不为NULL,并且
`引用的_表_NAME`不为NULL,并且
`引用的列名称不为空
不要忘记用您的数据库名称替换您的数据库名称 您可以使用:
SHOW CREATE TABLE table_name;
在MySQL中可视化关系的一种快速方法是使用数据库反向工程 这也可以使用反向工程来完成,这将生成一个实体关系图,非常类似于以下内容,尽管生成后您可能需要自己组织它: 1进入您的数据库: 使用数据库 2.显示所有表格: 展示表格 3查看表格的每一列,以收集其功能和组成: 描述表名 4“描述”很好,因为您可以准确地了解表列的功能,但如果您想更仔细地查看数据本身: 从TABLENAME中选择* 如果您有大表,那么每一行通常都有一个id,在这种情况下,我希望这样做只是为了获得几行数据,而不是让终端不知所措: 根据答案选择*from TABLENAME,其中id,您可以执行以下操作以查看架构的所有关系: 选择 `表_架构“”,外键架构 `表_NAME`,外键表 `列名称“”,-外键列 `引用的\u表\u架构“”,-源密钥架构 `引用的\u表\u名称',-原点键表 `引用的\u列\u名称`-原点键列 来自'INFORMATION\u SCHEMA'。'KEY\u COLUMN\u用法` 其中'TABLE_SCHEMA`='YourSchema' 并且“REFERENCED_TABLE_NAME”不是空的-只有带有外键的表 在大多数情况下,我想知道指向特定表的所有FK。在这种情况下,我运行: 选择 `表_架构“”,外键架构 `表_NAME`,外键表 `列名称“-外键列 来自'INFORMATION\u SCHEMA'。'KEY\u COLUMN\u用法' 其中'TABLE_SCHEMA`='YourSchema' 和'REFERENCED_TABLE_NAME'='YourTableName'
使用mysql workbench对数据库进行反向工程,并为您提供一个包含所有关系的ER图。除了外键约束,数据库中没有编码关系的内容。如果程序员没有提供文档,这只是他们的想法,你需要根据经验来解决。这就是为什么他们付给你一大笔钱。可能是复制品。你可以用这种方法提取外键。嗨,Satya,你能提供更多细节吗?逆向工程DB是什么?专业提示,只要问问你的上级谁知道。通常是以前的人留下的混乱。你只需要知道其中的一些。也许公司里没人知道所有的桌子。询问文档或图表,他们可能也没有。这并不能回答使用WHERE的问题id@Salketer你是对的。从信息、模式、表格约束中选择子句的位置是一个糟糕的选择;如果您处理的旧代码包含500多个表,则无法工作!这太酷了!关系是否也可以自动生成?我只知道独立表,不知道这是否可能。这可能是更好的答案。您通常希望了解单个表或表的单个列之间的关系。在复制并粘贴到sql终端之前,请先阅读行与行之间的内容。
SELECT
count(1) totalrelationships ,
c.table_name tablename,
CONCAT(' ',GROUP_CONCAT(c.column_name ORDER BY ordinal_position SEPARATOR ', ')) columnname,
CONCAT(' ',GROUP_CONCAT(c.column_type ORDER BY ordinal_position SEPARATOR ', ')) columntype
FROM
information_schema.columns c RIGHT JOIN
(SELECT column_name , column_type FROM information_schema.columns WHERE
-- column_key in ('PRI','MUL') AND -- uncomment this line if you want to see relations only with indexes
table_schema = DATABASE() AND table_name = 'YourTableName') AS p
USING (column_name,column_type)
WHERE
c.table_schema = DATABASE()
-- AND c.table_name != 'YourTableName'
GROUP BY tablename
-- HAVING (locate(' YourColumnName',columnname) > 0) -- uncomment this line to search for specific column
ORDER BY totalrelationships desc, columnname
;