首页 > 解决方案 > 如何进行行级锁定以确保 db2 过程中的 select 和 update 语句线程安全?

问题描述

我在 proc 中有一个 select 语句,它从一个表中查询整数值,然后将该整数值加一,我有一个更新语句,它正在更新表中的增量值。

我想在调用获取每个请求中更新的整数值的过程时使这个原子化。

请帮助使这个原子。

我试图只使用带有内联赋值变量的更新命令,比如

Update table SET col=col+1, @variable = col+1 where ?

但它在 sybase db 中工作,但在 db2 中不起作用。

标签: db2procedureatomic

解决方案


考虑使用以下语法:

select columnName from final table ( update yourTable set columnName = ColumnName + 1 where ... )

这消除了对两个单独语句的需要,更好地用于并发性。

为获得最佳结果,请确保该WHERE子句被完全索引,因此您应该检查访问计划以确认这一点。

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


推荐阅读