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

时间:2013-12-31 09:32:22

标签: mysql database relationship relation

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

反正知道这个吗?

10 个答案:

答案 0 :(得分:32)

从编程方面来说,更好的方法是从 INFORMATION_SCHEMA.KEY_COLUMN_USAGE 表中收集数据,如下所示:

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

根据您的目的,有更多列信息,例如 ORDINAL_POSITION

更多信息: http://dev.mysql.com/doc/refman/5.1/en/key-column-usage-table.html

答案 1 :(得分:14)

试试这个:

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

答案 2 :(得分:8)

尝试

  

选择
  `TABLE_NAME`,
  `COLUMN_NAME`,
  `REFERENCED_TABLE_NAME`,
  `REFERENCED_COLUMN_NAME`
  来自`information_schema` .KEY_COLUMN_USAGE`
  在哪里`CONSTRAINT_SCHEMA` ='YOUR_DATABASE_NAME'和   `REFERENCED_TABLE_SCHEMA`不是空和
  `REFERENCED_TABLE_NAME`不是空和   `REFERENCED_COLUMN_NAME`不是空白

不要忘记将YOUR_DATABASE_NAME替换为您的数据库名称!

答案 3 :(得分:5)

在MySQL中可视化关系的快速方法是使用MySQL Workbench对数据库进行逆向工程。

这也可以使用逆向工程来完成,这将导致实体关系图非常类似(尽管您可能必须自己组织它,一旦生成):

ERD

答案 4 :(得分:2)

你可以使用:

SHOW CREATE TABLE table_name;

答案 5 :(得分:2)


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
;

答案 6 :(得分:1)

1)进入你的数据库:
use DATABASE;

2)显示所有表格:
show tables;

3)查看表格的每一栏,收集它的作用以及它的作用:
describe TABLENAME;

4)描述很好,因为你可以准确地弄清楚你的表列的作用,但是如果你想更仔细地看看数据本身: select * from TABLENAME
如果你有大表,那么每一行通常都有一个id,在这种情况下,我喜欢这样做只是为了得到几行数据,而不是让终端不堪重负:
select * from TABLENAME where id<5 - 您可以在此处添加任何条件。

此方法为您提供的信息不仅仅是select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;,而且每次都会为您提供更多信息。

修改

正如评论所示,上述WHERE id < 5作为条件占位符是一个糟糕的选择。按ID号限制并不是一个好主意,特别是因为id通常不值得信赖。改为在查询末尾添加LIMIT 5

答案 7 :(得分:1)

基于xudre's答案,您可以执行以下命令查看架构的所有关系:

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`
WHERE `TABLE_SCHEMA` = 'YourSchema'
AND   `REFERENCED_TABLE_NAME` IS NOT NULL  -- Only tables with foreign keys

在大多数情况下,我想要了解的是指向特定表的所有FK。在这种情况下,我运行:

SELECT 
  `TABLE_SCHEMA`,                          -- Foreign key schema
  `TABLE_NAME`,                            -- Foreign key table
  `COLUMN_NAME`                            -- Foreign key column
FROM `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE`  
WHERE `TABLE_SCHEMA` = 'YourSchema'
AND   `REFERENCED_TABLE_NAME` = 'YourTableName'

答案 8 :(得分:0)

一个选项是:您可以进行逆向工程以图解方式理解它。

安装MySQL时,您将获得MySQLWorkbench。您需要打开它并选择要反向工程的数据库。单击“工具”或“数据库”菜单下的某处“反向工程”选项。它会要求您选择表格。您可以选择要理解的表格,也可以选择整个数据库。它将生成一个关系图。

答案 9 :(得分:-2)

我认为在MySQL中(例如在XAMPP中),您只需要从MORE下拉列表中选择数据库,单击以展开并选择DESIGNER选项。

有关更多详细信息,请参见下面的打印屏幕:

enter image description here