我想知道被另一笔交易阻止的交易会发生什么?
最好通过一个例子说,我有两个交易 - T1和T2以及以下场景:
T1 .............................................. .......... T2
锁定DB对象
阅读Q ................................................ ..Lock Q(T2被阻止)
写Q. 解锁Q
在T1完成后T2是否未被阻止或者它永远丢失了?我以前认为T2被发送到等待队列并等待轮到它。
感谢任何向我澄清这个概念的人:)
答案 0 :(得分:1)
在这种情况下会发生两件常见的事情:
UPDATE
选项发出的LOCK TABLE
或NOWAIT
声明。)让T2“永远丢失”将是数据库引擎中的一个错误。
有关Oracle锁定策略的有趣读物:How Oracle Locks Data。 (整个章节,数据并发和一致性,如果您正在研究这些数据库方面,这很有意思。请注意,这些细节依赖于高度数据库。您在那里阅读的内容不会例如,直接应用于SQL Server,DB2或MySQL。)