使用信息模式中的KEY_COLUMN_USAGE计算外键的数量

时间:2015-08-21 01:34:55

标签: mysql 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)中它返回了正确数量的外键,但我不确定这个查询在所有情况下是否都可以。 这个查询是否正确?还有另一种方式吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

referential_constraints表包含有关外键的信息。所以你可以这样做:

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

使用COUNT(DISTINCT)组合了同一外键约束中的多个列。如果您想分别计算所有列,请改用COUNT(*)

答案 1 :(得分:1)

如果您只想要外键,那么我认为这样可行:

SELECT COUNT(*) AS `number of foreign keys`
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'pubs' AND 
      POSITION_IN_UNIQUE_CONSTRAINT = 1;

根据documentationPOSITION_IN_UNIQUE_CONSTRAINTNULL主键和唯一键约束。因此,对于外键约束的第一个键列,它是1。