2012-08-05 125 views
0

我想知道被另一个交易阻止的交易会发生什么?锁定数据库中的交易

将最好的完成一个例子,说我有两笔交易 - T1和T2及以下情形:

T1 ................... ..................................... T2

锁定DB对象
读取Q。 .................................................锁Q(T2被阻断)

写Q 解锁Q

因此,没有在T2是T1完成后未被阻止还是永久丢失?我曾经认为T2被送入等待队列并在那里等待轮到它。

谢谢谁可以澄清这个概念,我:)

回答

1

有在这种情况下发生的两个常见的事情:

  1. T2等待,直到T1释放锁。这是如何实现的取决于数据库软件(以及潜在的操作系统提供的锁定原语)。当它试图锁定Q和发现它已被锁定
  2. T2被中止。 (例为Oracle,与NOWAIT选项发出UPDATELOCK TABLE声明。)

有T2“永远失去”将在数据库引擎中的错误。

有关Oracle锁定策略一个有趣的阅读:How Oracle Locks Data。 (这整章,数据并发性和一致性,如果你研究这些数据库方面是有趣的。需要注意的是这些细节高度数据库相关的。你读的东西不会有直接适用于SQL Server,DB2或MySQL的实例。)

+0

非常感谢你,是清除它) – user1039063 2012-08-05 18:39:15