我有十几个表,每隔10-20秒左右用TRUNCATE表清空,我的php脚本在XAMPP本地机器的shell中运行。
由于未知原因,每隔几个小时随机表就会消失,结果我的脚本停止了。脚本中没有会删除/删除表的查询
有趣的是,该表在主视图中被删除了,但我仍然可以在左侧的侧边栏中看到它。
当我尝试重新创建已删除的表时,我得到了#34;没有这样的表" mysql错误。我设法重新创建它的方法是复制表" .frm"来自相同表的文件,它允许我通过sql删除旧文件并重新创建它。
有没有人遇到过这种行为或者知道解释?这让我疯了几天......
答案 0 :(得分:4)
也许您应该考虑不使用truncate
进行此类操作。引自the reference manual:
逻辑上,
TRUNCATE TABLE
类似于删除所有行或DELETE
和DROP TABLE
语句序列的CREATE TABLE
语句。为了实现高性能,它绕过了删除数据的DML方法。 [...]虽然TRUNCATE TABLE
与DELETE
类似,但它被归类为 DDL语句,而不是DML语句。它在MySQL 5.5中以下列方式与DELETE不同:
- 截断操作删除并重新创建表,这比逐个删除行要快得多,特别是对于大型表。
这对于非频繁操作来说可能是一件好事。但是你每隔10-20秒就会截断表 !我不知道你的脚本是否在连续运行,但如果是这样的话,你的程序的一部分总是有可能试图将一行插入一个刚截断的表中(可能还没有完全重建)。我头脑中(和我的直觉)有很多东西告诉我,频繁截断表格并不是一个好主意。
另一方面......为什么你需要每20秒截断一次表格!?我只建议您不要这样做...创建分区,索引表格,截断表格,确保没有其他进程尝试使用它们...使用DELETE
代替{{ 1}} ... TRUNCATE
用于维护任务,而不是用于日常操作(这是我的观点)。