【发布时间】:2018-03-24 18:00:52
【问题描述】:
我需要计算数据库中表的确切行数(不使用 INFORMATION_SCHEMA 中的 TABLE_ROWS) 我正在尝试从this post执行脚本
SET @tableSchema = 'Db_Warehouse';
SET SESSION group_concat_max_len = 10000000;
SET @rowCounts = (
SELECT GROUP_CONCAT(CONCAT('SELECT ''',TABLE_NAME,''', COUNT(*) FROM ', TABLE_NAME) SEPARATOR ' union all ')
FROM information_schema.tables WHERE table_schema = @tableSchema
);
PREPARE statement FROM @rowCounts;
EXECUTE statement;
但我不断收到错误代码 1064:
<e>Query: PREPARE statement FROM @rowCounts
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table union all SELECT 'COX_ClientSatisfaction', COUNT(*) FROM COX_ClientSatisfa' at line 1
希望你能给点建议。
【问题讨论】:
-
你有一个表名
table吗?您应该修改您的 CONCAT() 以在标识符周围加上反引号。 -
我也必须评论一下,看起来您只是想获取所有表中的行数。
SHOW TABLE STATUS不行吗?或者它的等价物SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES...我知道这些只是表行的估计,但它们通常很接近,并且它的运行速度比每个表上的 COUNT(*) 快很多倍。跨度> -
嗨@BillKarwin 谢谢你的建议 - 我确实运行了 SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES... 但我需要这个来确定数据迁移是否成功,因为这是一个估计值两个数据库之间的数字不同
-
如果您要比较两个数据库,您可能希望使用mysqldbcompare 而不是花时间编写自己的数据库?该工具是免费的,它可以比较表定义、行数甚至数据。还有很多选项可以自定义它的功能。
-
这似乎正是我所需要的!谢谢@BillKarwin
标签: mysql dynamic prepared-statement