同时选择和更新

时间:2012-12-07 12:34:28

标签: mysql transactions

我需要将一些数据导出到CSV文件。为此,我发出SELECT命令,将某些列设置为0,然后将这些行设置为1,以便不再导出它们。

面对这种情况的最佳方法是什么?我指的是一些“交易”,其中UPDATE与我之前选择的行完全相同。

SELECT ... FOR UPDATE可以走了吗?

3 个答案:

答案 0 :(得分:1)

这是你在找什么?

UPDATE table SET column = 1 WHERE(
SELECT column FROM table WHERE column = 0)

答案 1 :(得分:0)

如果它对任何人都有帮助,我所做的就是在我的桌子上有一个3状态字段。

每次插入记录时,其初始状态为0。

当我想要导出新行时,会在事务内部发生以下情况:

  • 状态为0(新)的那些设置为1(即将导出)
  • 为csv export
  • 选择状态为1(即将导出)的行
  • 状态为1(即将导出)的设置为2(已导出)

答案 2 :(得分:0)

这个问题可能已经过时了,但可能有助于将来搜索同样的事情。简单回答不!。在MySQL中无法同时选择和更新。虽然根据您的问题,您可以像这样存储过程

CREATE PROCEDURE `GetandUpdate` (IN IDSet VARCHAR(300)
BEGIN
    select * from tbl_CSV where state = 0 and FIND_IN_SET(id, IDSet);
    update tbl_CSV set state = 1 where state = 0 and FIND_IN_SET(id, IDSet);
END

其中IDSet可以是逗号分隔的字符串,如 3,14,8,1