在信息模式中使用 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_CONSTRAINTNULL。因此,外键约束的第一个键列为 1。

referential_constraints table 包含有关外键的信息。所以你可以简单地做:

SELECT COUNT(DISTINCT CONSTRAINT_NAME)
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = 'pubs';

使用COUNT(DISTINCT) 合并处于同一外键约束中的多个列。如果您想单独计算所有列,请改用 COUNT(*)