如何从数据库中选择所有表,例如其中有一个外键?关于外键的数量,我还可以升序获取数据库中的所有表吗? 谢谢!
我确实发现了如何获取一个特定表的外键。但是,如何在所有表上迭代这样的查询?
USE INFORMATION_SCHEMA;
SELECT TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = "<database_name>"
AND TABLE_NAME = "<table_name>"
AND REFERENCED_COLUMN_NAME IS NOT NULL;
是否还可以通过计数外键来选择?
谢谢!
答案 0 :(得分:0)
对您的目标数据库运行此查询。请确保查询通过手动检查返回正确的数据,然后再依赖它:)
SELECT [Table Name],COUNT(*)
FROM
(
SELECT fk_tab.name as [Table Name],
fk.name [FK_Name]
FROM sys.foreign_keys fk
INNER JOIN sys.tables fk_tab
ON fk_tab.object_id = fk.parent_object_id
)A
GROUP BY [Table Name]
ORDER BY COUNT(*) DESC
对于MySQL,请您尝试一下。我只是从Here
复制了它select concat(fks.constraint_schema, '.', fks.table_name) as foreign_table,
'->' as rel,
concat(fks.unique_constraint_schema, '.', fks.referenced_table_name)
as primary_table,
fks.constraint_name,
group_concat(kcu.column_name
order by position_in_unique_constraint separator ', ')
as fk_columns
from information_schema.referential_constraints fks
join information_schema.key_column_usage kcu
on fks.constraint_schema = kcu.table_schema
and fks.table_name = kcu.table_name
and fks.constraint_name = kcu.constraint_name
group by fks.constraint_schema,
fks.table_name,
fks.unique_constraint_schema,
fks.referenced_table_name,
fks.constraint_name
order by fks.constraint_schema,
fks.table_name;
答案 1 :(得分:0)
您似乎想要一个简单的聚合查询:
SELECT TABLE_NAME, COUNT(*)
FROM KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = "<database_name>" AND
REFERENCED_COLUMN_NAME IS NOT NULL
GROUP BY TABLE_NAME;
但是,这是在计算具有声明的外键关系的列数。它不计算外键的数量,因为两列可用于单个外键关系。
尚不清楚您真正要做什么,因此也许此查询确实可以满足您的要求。
答案 2 :(得分:0)
有人可以帮助解决这个问题吗?尚未得到答复(以我可以解决问题的方式)。 要指定问题:
我想将数据从一个数据库迁移到另一个数据库。我想从表中外键的数量最少的实体开始(甚至零,这些实体将最容易迁移)。