SELECT在SELECT - UPDATE事务

时间:2016-01-19 13:03:09

标签: mysql sql select

我有一个SQL查询,它选择一个序列号,然后立即递增序列号。问题是当我运行语句时,select会在增量后返回更新的序列号。我希望它在更新之前返回序列号,然后更新执行并设置新的序列号。

下面是SQL:

 START TRANSACTION;

  -- Let's get the current value
  SELECT serial FROM boxLabelSerial FOR UPDATE;

   -- Increment the counter
  UPDATE boxLabelSerial SET serial = serial + 1;

  COMMIT;

谢谢。

2 个答案:

答案 0 :(得分:1)

但是,如果你要重新发明轮子,你需要"携带"从语气陈述到另一个的价值。变量是一种方法:

START TRANSACTION;

  -- Let's get the current value
  SELECT @s := serial FROM boxLabelSerial FOR UPDATE;

   -- Increment the counter
  UPDATE boxLabelSerial SET serial = @s + 1;

COMMIT;

注意:只有当您假设boxLabelSerial只有一行时,您的方法才有效。

答案 1 :(得分:0)

START TRANSACTION;

UPDATE boxLabelSerial SET LAST_INSERT_ID(serial) = serial + 1;
SELECT LAST_INSERT_ID() FOR UPDATE;

COMMIT;