问题描述
我在proc中有一条select语句,该语句从一张表中查询整数值,然后将该整数值加1,我有一条update语句正在更新表中的增量值。
请帮助使这个原子化。
我试图只使用带有内联赋值变量的更新命令
Update table SET col=col+1,@variable = col+1 where ?
但是它可以在sybase db中工作,但不能在db2中工作。
解决方法
考虑使用以下语法:
select columnName from final table ( update yourTable set columnName = ColumnName + 1 where ... )
这消除了对两个单独的语句的需求,更好地实现了并发性。
为获得最佳结果,请确保WHERE
子句已完全索引,因此您应检查访问计划以确认这一点。
选择正确的隔离级别(在连接级别或语句级别),以使事务中的其他语句(如果有)与业务需求相匹配。