sqlserver锁机制-分类及说明

一、锁机制出现的原因

当数据库面临并发操作时可能会发生数据不一致的情况

1、丢失更新

A、B两人同时更改一条数据,其中一个的修改结果会破坏另一个修改结果。

2、脏读

某条数据A更改后并未提交,B读取到A更改后但未提交的数据,B读取的则为脏数据

3、不可重复读

在同一个事务范围内有两次针对同一数据的查询,由于其它事务的参与,导致两次查询结果不一致

那么添加适当的锁机制,可以有效避免由于并发所导致的数据不一致情况


二、锁机制的种类及应用范围

1、共享锁(s):用于数据库只读操作 例如select语句,同一条记录在同一时刻可以设置多个共享锁

 互斥:独占锁。

2、更新锁(u):更新锁是一种中继锁,当事务更改某条数据是,需先获取共享锁,然后试图转换为更新锁,在进一步变成独占锁。

 同一资源只允许一个事务获取它的更新锁,可以有效防止多条共享锁试图转换为独占锁而引发的死锁。

3、独占锁/排他锁(x):可以防止并发事务对资源进行访问,资源被独占锁锁定后,任何其他事务无法对本资源进行修改,仅在使用 NOLOCK提示或未提交读隔离级别时才能进行读取操作

 互斥:共享锁。

4、意向锁:

 粒度:SQLServer可以分为 表、分页、行等级别的数据资源,(表>分页>行)

 在某条资源上放置共享锁前,需要对本资源更大粒度范围上(分页或表)设置意向锁,以避免其他事务对本分页放置独占锁

 包括 意向共享(IS)、意向独占(IS)、意向独占共享(SIX)、意向更新(IU)、共享意向更新(SIU)、更新意向排他(UIX)

作用:A事务对表内的页或行资源放置共享或排他锁前,在页或行所对应的表上放置意向共享或意向独占锁,B事务试图在该表应用锁前不必检查各个页或行锁,只需要检查表上的意向锁,可以有效提高效率


 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值