我有 2 个表,一个事件表和一个非事件表。我想将行从事件表移动到非事件表。我的第一个想法是
insert into inactive select * from active where ...
delete from active active where ...
然而,大约 0.42 秒后,我注意到如果更新改变 where 子句选择的内容,这将删除/重复行。
在这种情况下,我可以轻松地防止这种情况发生,但是如果我不能这样做,我该怎么办?
编辑:从答案看来,没有一种简单/微不足道的方法可以做到这一点。我真的很惊讶这一点。我认为拥有它会有一些实质性的好处。
最佳答案
状态标志是您的 friend 。
UPDATE old_data SET move="MARKED";
INSERT INTO somewhere... SELECT where move="MARKED";
DELETE FROM old_data WHERE move="MARKED";
如果您在关闭 Autocommit 的情况下执行此操作,它会在所有地方获取锁。
如果您想减少一点锁定,您可以在每一步之后进行 COMMIT。
关于sql - 在 SQL 中的表之间移动行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/300118/