如何计算MySql中引用外键的行数?

时间:2012-04-20 20:39:19

标签: mysql foreign-keys

让我们说一个像

这样的表格
CREATE TABLE `testdb`.`test` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

还有其他表可能有外键引用test.id列。有趣的是我不知道哪个表有这样的外键以及表有多少行。

现在我想计算分散在具有test.id外键的表中的行数。有可能吗?

我认为这在理论上是可行的,否则MySql无法执行ON DELETE CASCADEDELETE SET NULL等操作...

2 个答案:

答案 0 :(得分:6)

显示所有带行数的引用表

SELECT rc.table_name, t.TABLE_ROWS
FROM `REFERENTIAL_CONSTRAINTS` rc
INNER JOIN `TABLES` t ON t.TABLE_NAME = rc.TABLE_NAME
WHERE rc.REFERENCED_TABLE_NAME = "test"

显示所有引用表行数的总和

SELECT SUM(t.TABLE_ROWS) AS allReferencedTablesRowCount
FROM `REFERENTIAL_CONSTRAINTS` rc
INNER JOIN `TABLES` t ON t.TABLE_NAME = rc.TABLE_NAME
WHERE rc.REFERENCED_TABLE_NAME = "test"

答案 1 :(得分:0)

如果定义了外键约束,则可以从数据库模式中读取它们,以查看哪些表链接到主键。

编辑:check this(在左侧选择“数据库元数据” - >“查找子表”)