多个TRUNCATE查询后,MySql表会随机消失

时间:2014-09-23 23:41:06

标签: php mysql sql xampp truncate

我有十几个表,每隔10-20秒左右用TRUNCATE表清空,我的php脚本在XAMPP本地机器的shell中运行。

由于未知原因,每隔几个小时随机表就会消失,结果我的脚本停止了。脚本中没有会删除/删除表的查询

有趣的是,该表在主视图中被删除了,但我仍然可以在左侧的侧边栏中看到它。

当我尝试重新创建已删除的表时,我得到了#34;没有这样的表" mysql错误。我设法重新创建它的方法是复制表" .frm"来自相同表的文件,它允许我通过sql删除旧文件并重新创建它。

有没有人遇到过这种行为或者知道解释?这让我疯了几天......

1 个答案:

答案 0 :(得分:4)

也许您应该考虑不使用truncate进行此类操作。引自the reference manual

  

逻辑上,TRUNCATE TABLE类似于删除所有行或DELETEDROP TABLE语句序列的CREATE TABLE语句。为了实现高性能,它绕过了删除数据的DML方法。 [...]虽然TRUNCATE TABLEDELETE类似,但它被归类为 DDL语句,而不是DML语句。它在MySQL 5.5中以下列方式与DELETE不同:

     
      
  • 截断操作删除并重新创建表,这比逐个删除行要快得多,特别是对于大型表。
  •   

这对于非频繁操作来说可能是一件好事。但是你每隔10-20秒就会截断表 !我不知道你的脚本是否在连续运行,但如果是这样的话,你的程序的一部分总是有可能试图将一行插入一个刚截断的表中(可能还没有完全重建)。我头脑中(和我的直觉)有很多东西告诉我,频繁截断表格并不是一个好主意。

另一方面......为什么你需要每20秒截断一次表格!?我只建议您不要这样做...创建分区,索引表格,截断表格,确保没有其他进程尝试使用它们...使用DELETE代替{{ 1}} ... TRUNCATE用于维护任务,而不是用于日常操作(这是我的观点)。