我有一个SQL查询,它选择一个序列号,然后立即递增序列号。问题是当我运行语句时,选择在增量后返回更新的序列号。我希望它在更新之前返回序列号,然后执行更新并设置新的序列号。
下面是 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;
谢谢。
但是,如果你要重新发明轮子,你需要将音调语句的值"携带"到另一个。 变量是执行此操作的一种方法:
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
只有一行时,您的方法才有效。
START TRANSACTION;
UPDATE boxLabelSerial SET LAST_INSERT_ID(serial) = serial + 1;
SELECT LAST_INSERT_ID() FOR UPDATE;
COMMIT;