事务和并发控制

事务

事务就是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

事物的ACID特性

事务具有原子性,一致性,隔离性和持久性
原子性:表示事务中的操作是一个原子操作,要么全做,要么全不做
一致性: 表示数据库必须从一个一致状态转移到另一个一致状态,一致性是与原子性密切相关的。
隔离性: 是指一个事务的执行不能被其他事务干扰,即一个事务内部操作及其使用的数据对其他并发事务是隔离的,并发执行的各个事物之间互不干扰。
持久性:指一个事务一旦提交,他对数据库中数据的改变时永久性的,接下来的操作或者故障不应该对其执行结果有任何影响。

并发操作带来的数据不一致问题

并发操作带来的数据不一致问题包括丢失修改,不可重复读和读脏数据。

丢失修改:两个事务同时对一个数据进行修改,后者完成的事务覆盖改了前者的修改,导致前者的修改丢失。

不可重复读:事务1读取某个数据,事务2对该数据进行了修改,导致事务1无法重现前一次的读取结果。

读脏数据: 事务1修改某一数据后写入磁盘,事务2读取了该数据,但由于某种原因,事务1撤销了修改,这时事务2读取的数据就与数据库中的数据不一致了,则事务2读取的数据就是脏数据,即不正确的数据。

造成上述三类数据不一致问题的原因是并发操作破坏了事务的隔离性,并发控制机制就是要采用正确的方式来调度并发操作使一个用户事务的执行不受其他事务的影响,从而避免数据的不一致问题。

封锁

封锁是实现并发控制的一个重要的技术

排他锁

又称为写锁X,即对一个数据对象加上写锁后,不再允许其他事务读取和修改该对象。

共享锁

又称为读锁S,若事务对一个数据对象加读锁后,则该事务和其他事务只能读取该数据对象而不能写。

一级封锁协议

事务在修改数据对象R前必须对其加上写锁x,在事务完成后再释放,一级封锁协议可以解决丢失修改问题。

二级封锁协议

二级封锁协议在一级封锁协议的基础上增加了事务在读取数据前必须对其添加读锁,在读取数据后再释放读锁。二级封锁协议进一步防止了读脏数据的问题

三级封锁协议

三级封锁协议在一级封锁协议的基础上增加了事务在读取数据前必须对其添加读锁,在事务结束后再释放读锁。三级封锁协议进一步解决了不可重复读的问题。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值