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