星空网 > 软件开发 > 数据库

SQLServer 事务隔离级别与锁的申请和释放

脏读:当一个事务开始更新数据,但是这个事务并没有完全提交,这个时候第二个事务开始读取数据,把第一个事务所更改的数据读了出来,

          第二个事务读取的数据时临时的,因为有可能第一个事务最终有可能做回滚操作

不可重复读:在一个事务中多次读取某一行数据,可能会得到不同的结果

幻读:在一个事务中,我们读取数据,发现没有特定的行,第一个事务还没结束,这个时候第二个事务插入了该行数据,

          然后在第一个事务再次读取时,该行数据突然出现了

SQLServer数据库支持一下隔离级别:未提交读、已提交读、可重复读、快照、可序列化。

  • 未提交读(可以读取已由其他事务修改但未提交的行)
    • 不会发出共享来防止其他事务修改当前事务读取的数据
    • 也不会被排它锁阻塞
  • 已提交读(指定语句不能读取已由其他事务修改但未提交的数据,所以可以避免脏读)
    • 其他事务可以在当前事务的各个语句间更新数据,从而产生不可重复读和幻读
    • 数据库会在读的时候使用共享锁来防止其他事务在当前事务执行读取操作期间修改行,共享锁还会阻止语句在其他事务完成之前读取由这些事务修改的行,
    • 语句运行完后释放共享锁,而不是等到事务提交的时候
  • 可重复读(在一个事务中多次读取某一行数据,可能会得到相同的结果)
    • 对事务中的每个语句所读取的全部数据都设置了共享锁,并且共享锁一直保持到事务完成为止
  • 快照
    • 在任何一个修改之前,先对修改前的版本做一个复制,后续的一切读操作都会去读这个复制的版本,修改将创建一个新的版本,这种处理方式可以保证读写不会相互阻塞
  • 可序列化
  • 可序列化的要求是除了可重复读以外,还要求当前事务完成前,其他事务不能使用当前事务中任何语句的读取键值进行插入和删除操作。SQLServer通过加范围锁的方式来实现可序列化
隔离级别是否申请共享锁何时释放有无范围锁
未提交读不申请--
已提交读申请当前语句执行完
可重复读申请事务提交时
可序列化申请事务提交时

 


 

不同隔离级别的并发副作用:

隔离级别脏读不可重复读幻读
未提交读
已提交读
可重复读
快照
可序列化



原标题:SQLServer 事务隔离级别与锁的申请和释放

关键词:sql

sql
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

VAT审核的全面指南如何轻松通过审核:https://www.kjdsnews.com/a/1335866.html
VAT审核流程及注意事项详细剖析:https://www.kjdsnews.com/a/1335867.html
VAT审核流程及注意事项:https://www.kjdsnews.com/a/1335868.html
VAT审核方法如何轻松通过审核:https://www.kjdsnews.com/a/1335869.html
一则特别通知:卖家全网寻找恶搞者,答谢酬金高达30万!!:https://www.kjdsnews.com/a/1335870.html
揭秘出海品牌的秘密武器:语调和声音的力量!:https://www.kjdsnews.com/a/1335871.html
丽人丽妆2023年扭亏为盈 玉容初、美壹堂等自有品牌增速超40% :https://www.kjdsnews.com/a/1836576.html
一天拿下10万美金预售!深圳大卖出海第一年成为亚马逊供应商:https://www.kjdsnews.com/a/1836577.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流