sql - 在 SQL 中的表之间移动行

标签 sql partitioning

我有 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/

相关文章:

mysql - 在 MySQL 中,如何将整数列表传递给存储过程中的预准备语句?

sql - 如何选择两个不同列的计数?

mysql - 将嵌套子注释与 MySQL 相结合

sql - 选择 "group"中的第一条记录

mysql - 如何在此表上使用 MySQL 表分区?

mysql - 为什么在日期时间列上对 MySQL 表进行分区会产生依赖于时区的错误?

mysql - 数据库数据自己的分区

php - 如何在数组中查找找到的 id 的索引

MySQL - 在 WHERE 子句中使用 REPLACE()

apache-spark - 如何在Spark SQL中控制分区大小