我有一个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;
谢谢。
答案 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;