0

我有以下函数,它增加一个值然后检索它并返回它,我认为我可能面临的问题之一是在更新和选择另一个事务之间更新 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;
4

1 回答 1

0

我遇到过类似的问题,确实另一个更新或插入事务会更新 currentval。我解决问题的方法是将更新和选择放在一个事务中,这将导致表被锁定。这将确保您始终获得 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;
于 2012-12-20T16:38:27.060 回答