MySQL行消失(神秘)

时间:2014-01-15 11:34:07

标签: php mysql sql phpmyadmin innodb

我有3个表A,B和C,它们直接链接并且应该包含相同的行数,每个表的行一起创建。

我最近注意到,为了测试目的创建1000行(明确插入行,没有事务,系统稳定),并且没有任何应用程序活动,似乎缺少行。每个表的随机行数(0-50)(例如-30,-24,-7变化)似乎在几小时不活动后丢失。

这已经发生了好几次,起初我没有注意到,但现在我很肯定。没有任何代码可以包含DELETE FROM table(A/B/C),所以我怀疑编码错误这样做。

当我注意到缺少的行时,我正在使用phpMyAdmin,并且直接CLI查询确认了这一点。我确信我不会意外地通过GUI删除行。此外,这是在本地测试环境中,因此没有(希望)公共访问。

MySQL(限制设置)中是否存在可能导致此问题的内容?这些不是异常的表格或行,每行10列,CHAR / INT / ETC。类型,每个表每个250kb。

二进制日志文件会显示哪些行被删除以及何时以及由谁删除?配置日志记录的任何特殊注意事项?

  • 语言是PHP,MySQL是InnoDB,WAMP,Windows,通过phpMyAdmin查看

2 个答案:

答案 0 :(得分:4)

您使用的是phpMyAdmin。

如果表格中有很多行,则表格的预览会显示估计的行数,而非实际行数。

尝试

SELECT COUNT(*) FROM tableA;
SELECT COUNT(*) FROM tableB;
SELECT COUNT(*) FROM tableC;

并查看是否存在不同的行数。

否则,您是否设置了任何触发器?或innoDB的任何完整性问题?

答案 1 :(得分:1)

代表OP发表:

Steini的回答是正确的。我从来没有使用1000行表,并假设MySQL会自己保留内部行数。我还认为SHOW TABLE STATUS会给我一个准确的计数,但这(我猜)也是phpMyAdmin用来呈现其主页的内容。看起来很奇怪,具有相同行数的表会显示不同的近似值,因此我不知道近似值的更新时间和频率。其中大部分内容可在MySQL参考手册的“InnoDB表的限制”部分中找到。

解决方案:在检索StackOverflow时,使用SELECT COUNT(*) FROM table;检索准确的行数,然后查询有关魔法和缺失记录的问题。另请阅读手册中的每一行。