我有一个频繁更改原始数据的数据库。 有一个非常复杂的过程可以创建此数据的汇总表。
我创建了一个存储过程来创建这个使用三个表序列的表。由于我还没有跟踪哪些数据已更新(我正在处理这些数据),我只是使用以下序列填充这些查询:
TRUNCATE tablename ...
INSERT INTO tablename ...
我已将所有这三个查询移动到一个事务中:
START TRANSACTION READ WRITE;
[Sequence of TRUNCATE / INSERT queries]
COMMIT;
我预计在提交之后我会立即看到结果表,但似乎有2-3秒的时间表是空的。有没有一种简单的方法来解决这个问题?
答案 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;