SQL:在REPEATABLE READ隔离级别,是否将UPDATE锁保存到事务结束?

时间:2011-08-23 10:09:25

标签: sql transactions isolation-level

I have read关于REPEATABLE READ如何使SELECT语句持有的锁保持到事务结束。 UPDATE语句采用的独占锁是否同样如此?因此,当我在事务中更新一行时,后续的SELECT将返回UPDATE留下的值吗?

所以我理解,如果我在事务1中选择一行,那么事务2在事务1完成之前不能更新它。但是,如果我更新事务1中的行,那么事务2是否仍然必须等待事务1完成才能更新事务2?

1 个答案:

答案 0 :(得分:4)

除非第二个事务在隔离级别READ UNCOMMITED上运行,否则第一个事务中UPDATE语句所采用的独占锁将阻止任何选择,直到第一个事务提交为止。

  

所以我明白,如果我在事务1中选择一行,那么   在事务1完成之前,事务2不能更新它。然而,   如果我更新事务1中的行,则事务2仍然必须   在事务2可以更新事务之前等待事务1完成吗?

如果在REPEATABLE READ下,在事务1中执行SELECT,事务2仍然可以在事务1中添加与SELECT 的WHERE子句匹配的新数据。这是因为事务1放置了行读取锁定所有检索到的数据但不锁定范围锁。