DB2在多线程应用程序中更新时如何读取行?

时间:2014-11-11 17:17:29

标签: sql db2

我想在多线程环境中的以下语句中了解DB2的行为吗?

SELECT * FROM FINAL TABLE 
(
UPDATE USERTABLE.USERS 
SET MAILED = 3 WHERE NOT MAILED = 3 AND STATUS = 2
)

此查询读取STATUS = 2和MAILED!= 3的所有行,然后设置MAILED = 3,因此下一个查询不应读取相同的行。

如果有两个线程同时开始此查询,会发生什么?是否有可能它们都会读取相同的行并处理它们?我怎么能防止这种情况?我想要,直到第一个查询无法完成另一个查询将不会开始?

1 个答案:

答案 0 :(得分:1)

  

如果有两个线程同时开始此查询,会发生什么?是否有可能它们都会读取相同的行并处理它们?

并发事务读取相同的数据不仅是可能的,而且是不可避免的。您可以使用Read Stability isolation level来阻止并发更新,在这种情况下,其他事务将等待锁释放。要指定隔离级别,请在您的语句中附加WITH RS或在应用程序会话中发出语句SET ISOLATION RS