截断,然后在一个事务MySQL中插入

时间:2016-05-13 10:43:39

标签: mysql transactions

我有一个频繁更改原始数据的数据库。 有一个非常复杂的过程可以创建此数据的汇总表。

我创建了一个存储过程来创建这个使用三个表序列的表。由于我还没有跟踪哪些数据已更新(我正在处理这些数据),我只是使用以下序列填充这些查询:

TRUNCATE tablename ...
INSERT INTO tablename ...

我已将所有这三个查询移动到一个事务中:

START TRANSACTION READ WRITE;

  [Sequence of TRUNCATE / INSERT queries]

COMMIT;

我预计在提交之后我会立即看到结果表,但似乎有2-3秒的时间表是空的。有没有一种简单的方法来解决这个问题?

1 个答案:

答案 0 :(得分:2)

NO !! , 你不能在交易中使用 TRUNCATE 截断删除孔表文件并重新创建它。 截断操作会导致隐式提交。

一个想法:

它可以与RENAME一起使用。重命名是一个单一的交易

CREATE TABLE table_copy like your_table;
INSERT DATA in table_copy;
RENAME your_table TO your_table_old, table_copy TO your_table;
DROP table_copy;