如何确保db2过程中选择和更新语句线程安全的行级锁定?

问题描述

我在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子句已完全索引,因此您应检查访问计划以确认这一点。

选择正确的隔离级别(在连接级别或语句级别),以使事务中的其他语句(如果有)与业务需求相匹配。