原子[移动到另一个表,然后删除原始数据]

0at*_*man 1 mysql atomic

我有一个数据表和一个存档表.

Web应用程序将数据注入到数据表中,而cron作业每小时将数据拉出并将其存档在存档表中(这使数据表保持较小且可以快速使用).

我看到它有两个运行的psudo-SQL查询:

INSERT Archive SELECT * FROM Data;
Run Code Online (Sandbox Code Playgroud)

&

DELETE FROM Data;
Run Code Online (Sandbox Code Playgroud)

但是,我只想删除已成功复制的数据,如果复制失败,我希望它保持一致状态,数据既不会移动也不会被删除.

这样做的正确方法是什么?

Pau*_*lin 6

有了交易.

start transaction;
insert into archive select * from data;
delete from data where primary_key in (select primary_key from archive);
commit;
Run Code Online (Sandbox Code Playgroud)

  • 此外,`begin transaction`不是有效的MySQL命令.正确的命令是`start transaction`. (2认同)