并发问题

脏读:未确认的读取

非重复读:多次读取相同的数据行不一致(其他用户update)

幻象读:多次读取有不存在和新增的数据(其他用户insert或者delete)

隔离级别

隔离级别 脏读 非重复读 幻象 说明
未提交读
read uncommitted
不发出锁 如果其他事务更新,不管是否提交,立即执行
提交读(默认)
read committed
发出共享锁,保持到读取结束 读取提交过的数据,如果其他事务更新没提交,则等待
可重复读
repeatable read
发出共享锁,保持到事务结束 查询期间,不允许其他事务update
可串行读
serializeable
发出共享锁,保持到事务结束 查询期间,不允许其他事务insert或delete

共享锁:主要是为了共享读,如果存在事务(一个或者多个)拥有某数据的共享锁,不允许对锁定的数据进行update,从锁的角度讲,即不允许事务获取排他锁,要等到所有的共享锁都释放掉

排他锁:如果事务对数据已经拥有排他锁(只能有一个),其他的事务就不能对锁定的数据获取共享锁和排他锁,即排他锁与共享锁不能兼容

--------------------------------------------------------

NOLOCK:不发出锁,等同于READUNCOMMITTED

HOLDLOCK:发出共享锁,保持的事务结束,等同于SERIALIZABLE

XLOCK:发出排他锁,保持到事务结束

UPDLOCK:发出更新锁,保持到事务结束

READPAST:发出共享锁,但跳过锁定行,它不会被阻塞。适用条件:提交读的隔离锁,行级锁,select语句中。

相关文章:

  • 2021-09-29
  • 2022-12-23
  • 2021-07-12
  • 2022-12-23
  • 2022-01-10
  • 2021-09-12
  • 2021-07-04
猜你喜欢
  • 2021-05-15
  • 2022-12-23
  • 2022-12-23
  • 2021-09-28
相关资源
相似解决方案