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
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
;
4)DESCRIBE很好,因为您可以准确地找出表列的作用,但如果您想更仔细地查看数据本身:select * from TABLENAME 如果您有很大的表,那么每一行通常都有一个id,在这种情况下,我喜欢这样做是为了只获取几行数据,而不会使终端不堪重负: select * from TABLENAME where id<5-您可以在此处添加任何您喜欢的条件。
这种方法为您提供了比select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;更多的信息,而且每次它还为您提供更小的信息。
编辑
正如评论所暗示的,作为条件占位符,上面的WHERE id < 5不是一个好的选择。按ID号进行限制不是一个好主意,尤其是考虑到ID通常不值得信任而不是连续的。改为在查询末尾添加LIMIT 5。
9条答案
按热度按时间toe950271#
从编程Angular 讲,更好的方法是从INFORMATION_SCHEMA.KEY_COLUMN_USAGE表中收集数据,如下所示:
还有更多像ORDNAL_POSITION这样的列信息可能会对您的用途有所帮助。
更多信息:http://dev.mysql.com/doc/refman/5.1/en/key-column-usage-table.html
hwazgwia2#
试试这个:
axkjgtzd3#
尝试
选
TABLE_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替换为您的数据库名称!
6bc51xsx4#
在MySQL中可视化关系的一种快速方法是使用MySQL Workbench对数据库进行逆向工程。
这也可以使用反向工程来完成,这将产生一个很像下面这样的实体-关系图(尽管一旦生成,您可能需要自己组织它):
31moq8wy5#
mftmpeh86#
1)进入您的数据库:
use DATABASE;
2)显示所有表格:
show tables;
3)查看表格的每一列,收集它的用途和构成:
describe TABLENAME;
4)DESCRIBE很好,因为您可以准确地找出表列的作用,但如果您想更仔细地查看数据本身:
select * from TABLENAME
如果您有很大的表,那么每一行通常都有一个
id
,在这种情况下,我喜欢这样做是为了只获取几行数据,而不会使终端不堪重负:select * from TABLENAME where id<5
-您可以在此处添加任何您喜欢的条件。这种方法为您提供了比
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
更多的信息,而且每次它还为您提供更小的信息。编辑
正如评论所暗示的,作为条件占位符,上面的
WHERE id < 5
不是一个好的选择。按ID号进行限制不是一个好主意,尤其是考虑到ID通常不值得信任而不是连续的。改为在查询末尾添加LIMIT 5
。hkmswyz67#
根据xudre's答案,您可以执行以下命令来查看模式的所有关系:
在大多数情况下,我希望知道指向特定表的所有FK。在本例中,我运行:
f0brbegy8#
一种选择是:你可以做逆向工程,以图解的方式理解它。
当您安装MySQL时,您将获得MySQLWorkbench。您需要打开它并选择要进行反向工程的数据库。在工具或数据库菜单下的某个位置单击反向工程选项。它会让你选择table。您可以选择想要了解的表,也可以选择整个数据库。它将生成一个带有关系的图表。
vcirk6k69#
您可以使用: