SET TRANSACTION ISOLATION LEVEL xxx -- 每次设置只针对当前事务块
xxx 取值:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SNAPSHOT
SERIALIZABLE
test1表数据如下:
现在对 Name 为 aaaaa 进行 update,并设置2分钟延时
上面的 update 默认使用 rowlock的,所以对于该表是使用IX锁的(第12行),此时如果查询其它行,是不会被阻塞的,因为IX兼容IS。
但如果 update 使用 tablock,则该表将使用X锁,有关该表查询都会被阻塞,因为X不兼容IS。
设置事务隔离级别为 READ UNCOMMITTED,则允许脏读(注意此事务隔离级别设置只在当前有效)
等同如下设置,但nolock只针对当前select语句:
此时如果如下使用,将会被阻塞:
最后,延时结束时,update 的数据被回滚,导致上面有结果的查询出现脏读,而被阻塞的查询将会获得如下数据:
时间: 2024-11-05 15:54:19