数据库事务并发产生的问题和封锁协议以及数据库隔离级别

4 篇文章 0 订阅
2 篇文章 0 订阅
  1. 数据库事物并发带来的问题

(1)脏写、丢失更新
都是讲2个事物并发执行的时候一个事物覆盖了另外一个未提交的事物的值
一个事物的回滚覆盖了另外一个事物的提交。
(2)脏读
a事物度读取了b事物未提交的值(修改过的值),b事物回滚。
(3)不可重复读
一个事物b读取了另一个未提交事物a的值x=10,a回滚读到x=0,b第二次读到的数据和第一次不一致。
(4)幻读
同样的查询条件由于a事物插入了数据 导致读到的数据量不一样。比如b读取x=10的数据有1条数据,a插入20条x=10的数据,b再次读取就有21条了。
2. 不同数据库的隔离级别
所有的数据库事物都不会允许脏写
所以有

				 脏读     可重复读   幻读
读未提交       	  x 		x 	 	x
读已提交       	  √ 		x		x
可重读读       	  √ 		√ 		x
串行化        	  √ 		√ 		√
  1. 三段锁协议
    x 锁:写锁,在未释放前其他事物对这条记录不能加s锁和x锁;s 锁:读锁,在未释放前其他事物对这条记录能加s锁不能加x锁

    一段锁协议是指在事物中写数据时必须加x锁;加了x锁就可以其他事物就必须等待释放掉,不会出现2个不同事物修改到同一个事物的值,就能解决掉脏写和丢失更新。读数据不会加任何锁,所以就算a加了写锁,b事物也能直接都到脏数据。
    二段锁协议是在一段锁协议的基础上读取记录会加s锁,并且在未提交前就可以释放掉;从上面脏读的定义b事物想读取要加s锁,而这个时候a如果要修改就会对这条记录加了x锁,b就需要等待a事物结束才能读取(重点在b读的时候要加s锁)。因为b未提交就释放了锁,所以a是可以继续修改记录,这个时候会发生不可重复读。
    三段锁协议是在一段锁协议的基础上读取锁会加s锁,并且在提交后才可以释放掉。因为b读取加了s锁,并且直达都事物提交都不会释放,所以a事物在b提交之前都不能加上x锁,就可以防止不可重复读

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值