获取 MySQL 数据库中所有表的记录数

新手上路,请多包涵

有没有一种方法可以获取 MySQL 数据库中所有表中的行数,而无需在每个表上运行 SELECT count()

原文由 Mark 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 595
2 个回答
SELECT SUM(TABLE_ROWS)
     FROM INFORMATION_SCHEMA.TABLES
     WHERE TABLE_SCHEMA = '{your_db}';

不过来自文档的注意事项: 对于 InnoDB 表, 行数只是 SQL 优化中使用的粗略估计。您需要使用 COUNT(*) 进行精确计数(这更昂贵)。

原文由 Hates_ 发布,翻译遵循 CC BY-SA 3.0 许可协议

像许多其他人一样,我很难在具有 InnoDB 的 INFORMATION_SCHEMA 表上获得准确的值,并且能够从能够进行依赖于 count() 的查询中无限受益,并且希望, 在一个单一的查询中完成。

首先,确保启用大量 group_concats:

 SET SESSION group_concat_max_len = 1000000;

然后运行此查询以获取您将为数据库运行的结果查询。

 SELECT CONCAT('SELECT ', GROUP_CONCAT(table1.count SEPARATOR ',\n')) FROM (
    SELECT concat('(SELECT count(id) AS \'',table_name,' Count\' ','FROM ',table_name,') AS ',table_name,'_Count') AS 'count'
    FROM information_schema.tables
    WHERE table_schema = '**YOUR_DATABASE_HERE**'
) AS table1

这将生成输出,例如…

 SELECT (SELECT count(id) AS 'table1 Count' FROM table1) AS table1_Count,
   (SELECT count(id) AS 'table2 Count' FROM table2) AS table2_Count,
   (SELECT count(id) AS 'table3 Count' FROM table3) AS table3_Count;

这反过来又产生了以下结果:

 *************************** 1. row ***************************
table1_Count: 1
table2_Count: 1
table3_Count: 0

原文由 HoldOffHunger 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题