执行更新然后选择并发问题

时间:2012-12-20 16:31:33

标签: mysql sql concurrency

我有以下函数,它递增一个值然后检索它并返回它,我认为我可能面临的问题之一是更新和选择另一个事务更新currentVal值因此导致检索错误的更新值,我是否认为这是正确的?

CREATE FUNCTION INCREMENT()
RETURNS INT
BEGIN
DECLARE newVal;
UPDATE table_x SET currentVal=currentVal+1;
SELECT currentVal INTO newVal FROM table_x;
RETURN newVal;
END;

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,而且另一个更新或插入事务确实会更新currentval。我解决问题的方法是将更新和选择放入将导致表被锁定的事务中。这将确保您始终获得当前时间。

CREATE FUNCTION INCREMENT()
RETURNS INT
BEGIN
DECLARE newVal;
Begin tran
UPDATE table_x SET currentVal=currentVal+1;
SELECT currentVal INTO newVal FROM table_x;
Commit tran
RETURN newVal;
END;