【问题标题】:How to do row level locking for ensuring select and update statement thread safe in db2 procedure?如何进行行级锁定以确保 db2 过程中的 select 和 update 语句线程安全?
【发布时间】:2020-10-15 16:14:04
【问题描述】:

我在 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 ... )
  • @mao 你的评论应该就是答案

标签: db2 procedure atomic


【解决方案1】:

考虑使用以下语法:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-03-21
    • 2011-10-05
    • 1970-01-01
    • 2016-12-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多