从最终表中选择(更新表)并发选择,即从两个线程中选择

时间:2015-11-16 09:01:56

标签: select concurrency db2

由于我的项目中的并发问题由于2个线程一起进行同时进行选择而发生,因此两者都接收到理想情况下不应发生的相同值。 选择一个值后,它应该执行更新,然后第二个线程应该选择更新的值。 使用DB2  我想过使用这种使用

的方法
  

从最终表中选择数字(更新表名设置columnanme =""   在哪里)

。 我的问题是,当其他线程进入选择值时,这种方法是否会锁定数据库,因为这是select中的更新?并解决我的并发问题。 要么 我在浏览并找到了另一种方法

  

更新表(.....)从等待的表中选择col   结果

这会选择等到第一个线程完成选择吗?

1 个答案:

答案 0 :(得分:0)

你可以做的一件事是在一个读者更新之前避免多次读取相同的值:

  1. LOCK TABLE tablename IN EXCLUSIVE MODE;
  2. SELECT id,... FROM tablename WHERE ...;
  3. UPDATE tablename SET id = newval WHERE ...;
  4. COMMIT;
  5. 这当然会阻止完整的表,这可能不是你想要的!

    替代方法(相对标准,但更多涉及编程逻辑):

    1. SELECT id,... FROM tablename WHERE ...
    2. SELECT count(1)FROM FINAL TABLE(UPDATE tablename SET id = newval WHERE ... AND id = newval);
    3. 而此计数(1)为零(意思是:其他人同时更新 它)从1)重复
    4. - 彼得·凡罗斯,
             ABIS培训&咨询,        比利时鲁汶。