db2 - 如何进行行级锁定以确保 db2 过程中的 select 和 update 语句线程安全?
问题描述
我在 proc 中有一个 select 语句,它从一个表中查询整数值,然后将该整数值加一,我有一个更新语句,它正在更新表中的增量值。
我想在调用获取每个请求中更新的整数值的过程时使这个原子化。
请帮助使这个原子。
我试图只使用带有内联赋值变量的更新命令,比如
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
子句被完全索引,因此您应该检查访问计划以确认这一点。
选择正确的隔离级别(连接级别或语句级别)以使事务中的其他语句(如果有)与业务需求相匹配。
推荐阅读
- r - 用 hexSticker 修剪六边形?
- db2 - 如何确定 db2secGetAuthIDs 中 initsessionidtype 的正确返回
- angular - 如何成功处理错误和成功消息?
- json - Errno::EACCES: 权限被拒绝 @ rb_sysopen
- python - 如何用 0 替换 NULL
- asp.net-core - ASP.Net Core - 访问被拒绝的 EC2 到 S3 文件上传
- javascript - D3:它没有显示美国地图
- java - 有什么方法可以删除 Install4j 中的内置窗口标题栏?
- python - 重定向视图中的 Django NoReverseMatch 错误
- javascript - Swift 中的 ArrayBuffer 和 Float64Array