2011-08-23 69 views
2

I have read關於REPEATABLE READ如何導致SELECT語句持有的鎖保持在事務結束時。對UPDATE語句採用的排它鎖也是如此?因此,當我在一個事務中更新一行時,後續的SELECT會返回UPDATE留下的值嗎?SQL:在REPEATABLE READ隔離級別,UPDATE鎖是否保存到事務結束?

所以我明白,如果我在事務1中選擇一行,那麼在事務1完成之前,事務2不能更新它。但是,如果我更新事務1中的行,事務2是否仍然必須等待事務1完成才能將事務2更新?

回答

4

除非第二個事務在隔離級別READ UNCOMMITED中運行,否則UPDATE語句在第一個事務中採用的排它鎖將阻止任何選擇,直到第一個事務提交。

所以我明白,如果我在事務1中選擇一行,然後 事務2不能更新它,直到事務1完成。但是,如果我更新了事務1中的行,則事務2仍然需要 等待事務1在事務2可以更新之前完成嗎?

是的。

如果在REPEATABLE READ下執行事務1中的SELECT,事務2仍然可以添加與事務1中的SELECT的WHERE子句相匹配的新數據。這是因爲事務1將所有檢索到的行讀取鎖數據但不是範圍鎖定。