【发布时间】:2011-08-23 18:17:44
【问题描述】:
我有一个 InnoDB 表,需要在 60k 到 200k 条记录中每十分钟重新填充一次。到目前为止,我们的方法如下:
- 关闭自动提交
- 截断表格
- 执行选择查询和附加计算(使用 PHP)
- 插入新记录
- 提交
但在执行截断操作后,数据会立即删除,并且不再可从用户界面获得。对于我们的用户来说,这非常令人不安,即使在大约 30 秒左右的时间内脚本遇到了 Commit 操作并重新填充了表。
我想也许我可以将整个操作,包括Truncate,包装在一个事务中,这样可以减少表格对用户显示为空的时间长度.所以我把SET AUTOCOMMIT=0改成了START TRANSCATION。
哎呀!这与预期的效果相反!现在TRUNCATE 操作仍然发生在脚本的开头,但是在事务中实际执行INSERT 操作需要更长,所以到COMMIT 操作需要地点和表格中的数据又可以使用了,已经快十分钟了!
什么可能导致这种情况?说实话,我根本没想到会有任何变化,因为我的印象是发起交易基本上只是关闭了Autocommit??
【问题讨论】:
标签: mysql transactions truncate