1 问题描述
以下数据表均进行了截断或清空,但行数统计一栏仍显示为截断或清空之前的行数。
2 原因
MySQL 在当前连接下的 information_schema
数据库中的 TABLES
表中,存放了当前连接下的所有数据库的所有表的信息,其中TABLE_ROWS
字段记录了表中数据的行数。
从TABLES
表中可以看出,截断或清空数据表后,TABLES
表中的TABLE_ROWS
字段并不会更新。
为什么与实际的行数不一致呢?
MySQL官方文档对TABLE_ROWS
字段的做出了如下解释:
The number of rows. Some storage engines, such as MyISAM, store the exact count. For other storage engines, such as InnoDB, this value is an approximation, and may vary from the actual value by as much as 40% to 50%. In such cases, use SELECT COUNT() to obtain an accurate count.
行数。一些存储引擎(如MyISAM)存储确切的计数。对于其他存储引擎,如InnoDB,该值是一个近似值,可能与实际值相差40%至50%。在这种情况下,请使用SELECT COUNT()获得准确的计数。
所以,不要被MySQL给的行数迷惑了。要想获得一张表真实的行数,还得是 SELECT COUNT(*)