SQLServer中的事务加锁策略

本文介绍了SQLServer中事务的ACID特性,包括原子性、一致性、隔离性和持久性。详细阐述了数据库锁的种类,如共享锁、排它锁、更新锁以及意向锁,分析了它们的作用和避免数据错误的场景。并提供了锁兼容性图表和锁粒度的参考资料,还通过实例演示了不同锁类型在查询和更新操作中的应用,以及如何处理死锁问题。
摘要由CSDN通过智能技术生成

一个事务的例子:

tim要给bill转账100块钱:

1.检查tim的账户余额是否大于100块;

2.tim的账户减少100块;

3.bill的账户增加100块;

这三个操作就是一个事务,必须打包执行,要么全部成功,要么全部不执行,其中任何一个操作的失败都会导致所有三个操作“不执行”——回滚。

事务的ACID特性

原子性:

一个事务必须保证其中的操作要么全部执行,要么全部回滚,不可能存在只执行了一部分这种情况出现。

一致性:

数据必须保证从一种一致性的状态转换为另一种一致性状态 。

比如上一个事务中执行了第二步时系统崩溃了,数据也不会出现bill的账户少了100块,但是tim的账户没变的情况。要么维持原装(全部回滚),要么bill少了100块同时tim多了100块,只有这两种一致性状态的。

隔离性:

在一个事务未执行完毕时,通常会保证其他Session 无法看到这个事务的执行结果。

持久性:

事务一旦commit,则数据就会保存下来,即使提交完之后系统崩溃,数据也不会丢失。

 

在多用户都用事务同时访问同一个数据资源的情况下,有可能造成以下几种数据错误:

不可重复读:

如果一个用户在一个事务中多次读取一条数据,而另外一个用户则同时更新啦这条数据,造成第一个用户多次读取数据不一致。

脏读:

第一个事务读取第二个事务正在更新的数据表,如果第二个事务还没有更新

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值