use*_*861 24 mysql database relationship relation
如何找到所有MySQL表之间的所有关系?例如,如果我想知道具有大约100个表的数据库中的表的关系.
反正知道这个吗?
xud*_*dre 39
从编程方面来说,更好的方法是从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
Run Code Online (Sandbox Code Playgroud)
有更多列信息,如ORDINAL_POSITION,根据您的目的可能有用.
更多信息: http ://dev.mysql.com/doc/refman/5.1/en/key-column-usage-table.html
BaB*_*L86 15
试试这个:
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Run Code Online (Sandbox Code Playgroud)
尝试
选择
`TABLE_NAME`,
`COLUMN_NAME`,
`REFERENCED_TABLE_NAME`,
`REFERENCED_COLUMN_NAME`
来自`information_schema`
.KEY_COLUMN_USAGE` WHERE`CONSTRAINT_SCHEMA` ='YOUR_DATABASE_NAME'和
'REFERENCED_TABLE_SCHEMA`不是空的,
`REFERENCED_TABLE_NAME`不是空的,
而是`REFERENCED_COLUMN_NAME`不是空的
不要忘记用您的数据库名称替换YOUR_DATABASE_NAME!
小智 6
在MySQL中可视化关系的快速方法是使用MySQL Workbench对数据库进行逆向工程.
这也可以使用逆向工程来完成,这将导致实体关系图非常类似于以下(尽管您可能必须自己组织它,一旦生成):
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
;
Run Code Online (Sandbox Code Playgroud)
根据xudre的回答,您可以执行以下命令来查看模式的所有关系:
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
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,我想要的是知道指向特定表的所有 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'
Run Code Online (Sandbox Code Playgroud)