我正在尝试确定哪些表和视图用于MYSQL数据库中的所有表和视图。例如,我需要看到:
table A uses view B
table A also uses table C
table C uses table D
table C also uses view X
我知道我必须对information_schema进行查询并将其加入到另一个information_schema查询中,但不知道这些查询应该是什么。
感谢任何帮助。
答案 0 :(得分:0)
要获取给定数据库的FROM子句中使用的表和视图的列表,您可以使用:
SELECT CONCAT('`', v.table_schema,'`.`', v.table_name,'`') AS 'view',
GROUP_CONCAT(CONCAT(' `', t.table_schema,'`.`', t.table_name, '`')) AS 'tables'
FROM information_schema.tables t
JOIN information_schema.views v
ON (v.view_definition REGEXP CONCAT('`', t.table_schema, '`.`' , t.table_name, '`') = 1)
WHERE v.table_schema = 'sakila'
GROUP BY 1;
MySQL相当有用地扩展了存储视图定义时使用的表名,以包含模式名称,然后使用反引号转义批次。通过匹配这个完整的字符串而不仅仅是表名,我们可以消除匹配部分字符串,列名和碰巧匹配的别名。
我假设当你说"表C使用表D"在你的问题中,你指的是两者之间的外键关系。您可以从information_schema.key_column_usage
获取此数据。
e.g。
SELECT CONCAT('`', table_schema, '`.`', table_name, '`') AS 'table',
GROUP_CONCAT(DISTINCT CONCAT(' `', referenced_table_schema, '`.`', referenced_table_name, '`')) AS 'referenced table(s)'
FROM information_schema.key_column_usage
WHERE 1 = 1
AND table_schema = 'sakila'
AND referenced_column_name IS NOT NULL
GROUP BY 1;