首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在没有超时的情况下锁定Db2中的更新行?

如何在没有超时的情况下锁定Db2中的更新行?
EN

Stack Overflow用户
提问于 2018-10-23 18:25:34
回答 2查看 3K关注 0票数 2

我需要在没有数据异常的情况下在zos上更新ibm中的每一个连接一行。

我选择更新与RS使用和保持语句,但有一个问题。如果一个客户端在数据更新期间持有锁,同时第二个用户试图读取同一行,则第二个用户将等待锁被释放。

我需要在下一个行为:第二个用户获得错误,如果在锁下行。

在DB2 11中有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-23 20:35:15

如果我正确读取您的请求,您需要的是一个条件选择,如果您可以获得更新锁的话。我不相信有办法这样做。但是,另一种您可以做的事情是:

SELECT myCount FROM myTable WHERE ID = someValue

然后,您可以更新该值并使用WHERE子句执行更新,该子句查找ID和myCount的原始值。像这样的序列

代码语言:javascript
运行
复制
SELECT myCount FROM myTable WHERE ID = someValue
origCount = myCount++
UPDATE myTable WHERE ID = someValue AND myCount = origValue

如果您的更新显示零行已更新,则会有其他人对其进行更新的指示,然后您将重复该序列或转移到您的备用逻辑。

我相信这将实现您正在寻找的东西,而不必检测锁的存在,因为您指示您一次访问一个行,您可以使用CS隔离。

这通常被称为乐观并发

乐观并发控制(OCC)是一种应用于关系数据库管理系统和软件事务内存等事务系统的并发控制方法。OCC假设多个事务可以频繁地完成,而不会相互干扰。在运行时,事务使用数据资源而不获取这些资源的锁。在提交之前,每个事务都会验证是否没有其他事务修改它读取的数据。如果检查显示有冲突的修改,则提交事务将回滚并可以重新启动。1乐观并发控制是由H.T.贡和John T. Robinson首次提出的。

票数 1
EN

Stack Overflow用户

发布于 2018-11-08 22:58:25

有很长的时间来更新一条记录,也许最好只是读取包含时间戳的记录,然后处理其他的记录。准备更新时,读取更新,如果时间戳未更改,则更新记录。如果时间戳被更改,则显示错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52955579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档