在信息模式中使用 KEY_COLUMN_USAGE 计算外键的数量
Count number of foreign keys using KEY_COLUMN_USAGE in the information schema
我有一个非常大的 MySQL 数据库,我需要知道它有多少个外键。我尝试使用命令:
SELECT COUNT(*) AS 'number of foreign keys'
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA='pubs'
AND REFERENCED_TABLE_NAME IS NOT NULL;
在一个小型数据库 (pubs) 中,它返回了正确数量的外键,但我不确定这个查询是否在所有情况下都正常。
这个查询是否正确?还有别的办法吗?
提前致谢。
如果你只想要外键,那么我认为这会起作用:
SELECT COUNT(*) AS `number of foreign keys`
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'pubs' AND
POSITION_IN_UNIQUE_CONSTRAINT = 1;
根据documentation,对于主键和唯一键约束,POSITION_IN_UNIQUE_CONSTRAINT
是NULL
。因此,外键约束的第一个键列为 1。
referential_constraints
table 包含有关外键的信息。所以你可以简单地做:
SELECT COUNT(DISTINCT CONSTRAINT_NAME)
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = 'pubs';
使用COUNT(DISTINCT)
合并处于同一外键约束中的多个列。如果您想单独计算所有列,请改用 COUNT(*)
。
我有一个非常大的 MySQL 数据库,我需要知道它有多少个外键。我尝试使用命令:
SELECT COUNT(*) AS 'number of foreign keys'
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA='pubs'
AND REFERENCED_TABLE_NAME IS NOT NULL;
在一个小型数据库 (pubs) 中,它返回了正确数量的外键,但我不确定这个查询是否在所有情况下都正常。 这个查询是否正确?还有别的办法吗?
提前致谢。
如果你只想要外键,那么我认为这会起作用:
SELECT COUNT(*) AS `number of foreign keys`
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'pubs' AND
POSITION_IN_UNIQUE_CONSTRAINT = 1;
根据documentation,对于主键和唯一键约束,POSITION_IN_UNIQUE_CONSTRAINT
是NULL
。因此,外键约束的第一个键列为 1。
referential_constraints
table 包含有关外键的信息。所以你可以简单地做:
SELECT COUNT(DISTINCT CONSTRAINT_NAME)
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = 'pubs';
使用COUNT(DISTINCT)
合并处于同一外键约束中的多个列。如果您想单独计算所有列,请改用 COUNT(*)
。