mysql事务隔离级别另类解释

MySQL事务隔离级别老生常谈,老是理解不到位,今天以特定的角度理解一下

1.前提:MySQL为了多用户同时操作数据时避免相互干扰所以产生了事物的隔离级别

2.有这么几种:read-uncommitted(读未提交) 、read-committed(读已提交)、read-repeated(可重复读)、serializable(串读)

我们这么理解:

将前三种种拆成两部分,每一部分表示一个事务,两部分就表示两个事务,两部分表示两种操作,当然都针对的是同一个变量,

例如

(1)read-uncommitted,可以表示为事务1正在读操作变量A=1,事务2对变量A=2的操作还未commit,事务1读取到了事务2未提交的数据A=2,想想,如果事务2在事务最后进行了回滚A=1,那事务1就会读取到没有意义的数据A=2,这就是脏读

(2)read-committed,事务1读到了事务2已经commit的数据,但是设想这么一个场景,事务1刚开始读取A=1,然后事务2将A=2commit,但是事务1还没有commit,再来读取A,就读到了A=2,这就是不可重复读,就是在一个事务1里面前后读取的数据不一致,解决这个问题的办法就是read-repeated(可重复读)

(3)read-repeated(可重复读),表示在事务1执行过程中一直读取A=1,即使事务2修改A=2commit,事务1也是读取的A=1,只有事务1也commit,事务1才读取到新的值A=2,但是设想一个场景,事务1先读取A=1,然后事务2修改A=2commit,然后事务1没有结束,后边一直使用A=1,这就是幻读,就是读取到了不真实的数据,只是幻影数据,解决这个问题的办法就是serializable(串读)

(4)串读有一个问题就是并发量不高,它通过写锁和读锁来实现并发的控制,这里就不描述了,比较简单

 

推荐一个博客,讲的比较人性化

http://blog.51cto.com/changeflyhigh/1881614

另外一个随手看到的:

https://blog.csdn.net/lpp_dd/article/details/83183816

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值