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

如何计算MySql中引用外键的行数?,mysql,foreign-keys,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的外键。可能吗 我认为这在理论上是可能的,

比如说像这样的桌子

CREATE TABLE `testdb`.`test` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
还有其他表可能具有引用test.id列的外键。有趣的是,我不知道哪个表有这样一个外键,以及这个表有多少行

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


我认为这在理论上是可能的,否则MySql无法执行诸如删除级联上的
删除集NULL

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


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

显示具有行计数的所有引用表

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"

我认为这是不可能的。其他表有对该表的引用,但该表没有对其他引用的引用。我认为不知道该数量是整个想法的一部分。是否要从其他表动态计算外键约束?是否要在MySQL中执行所有检查?你害怕使用正则表达式吗?必须有办法找出这些引用的位置,否则就不可能进行删除级联。但是,mysql可能不会向用户公开该接口。正如@JohnFx所提到的,这是我使用的mysql的一个副本,上面的内容只适用于SQLServer吗?不,它适用于mysql,但高于mysql 5.1(引用的_约束表是在mysql 5.1.10中添加的。引用的_table_NAME列是在mysql 5.1.16中添加的。)