2012-08-05 171 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