如何找到所有mysql表之间的所有关系?

如何找到所有mysql表之间的所有关系?,mysql,database,relationship,relation,Mysql,Database,Relationship,Relation,如何找到所有MySQL表之间的所有关系?例如,我想知道大约有100个表的数据库中表之间的关系 有人知道这一点吗?试试这个: select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS; 一个选择是:您可以通过逆向工程以图解的方式理解它 当您安装MySQL时,您将获得MySQLWorkbench。您需要打开它并选择要进行反向工程的数据库。单击“工具”或“数据库”菜单下的“反向工程”选项。它将要求您选择表格。要么选择要理解的表,要么选择整个数据库。它将生成

如何找到所有MySQL表之间的所有关系?例如,我想知道大约有100个表的数据库中表之间的关系

有人知道这一点吗?

试试这个:

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
;