【发布时间】:2016-06-16 16:29:11
【问题描述】:
由于我的项目中发生了一个并发问题,该问题是由于 2 个线程同时进入一起进行选择,所以两者都收到相同的值,理想情况下不应该发生。 选择一个值后,它应该执行更新,然后第二个线程应该选择更新的值。 我正在使用 DB2 我想过使用这种使用方法
从最终表中选择数字(更新表名 set columnanme="" 哪里)
。 我的问题是,当另一个线程进入以选择值时,这种方法会锁定数据库,因为 select 中有更新吗?并解决我的并发问题。 或者 我正在浏览并找到另一种方法
update table (.....) select col from table where wait for 结果
这个选择会等到第一个线程完成选择吗?
【问题讨论】:
-
根据我的理解,更新语句将锁定记录,直到执行 COMMIT。您的 SELECT 语句可能无法获得对记录的独占控制权,因此我猜是这个问题。您可以尝试使用您的 select WITH CS,我认为它应该等待
-
我认为我们需要更多地了解您的应用程序在做什么。 @PK20 可能是正确的,提高隔离级别可能会解决这个问题(尽管您可能需要 RS,并且 both 语句必须在事务中运行)。但我的直觉是抽搐。那么,我们能否至少获得两个完整的陈述(必要时匿名)?
-
你想让阅读线程做什么?堵塞?失败?读取之前的值?
-
我使用的是 IBM DB2 9.7。
-
我通过 WMB 使用这个 DB2(使用 ESQL)。这将连接到 DB2,该 DB2 有一个包含 seq_num 列的表和 2 个用于 where 条件的其他列。线程根据其他两列访问这个 seq_num,然后通过递增来更新 seq_num,以便每个访问线程都获得唯一的 seq_num。感谢您的解决方案。 @PK20 我将用 RS 实现,看看会发生什么。
标签: select concurrency db2