mysql 事务隔离级别

read-uncommitted(未提交读)
测试流程:
1、A设置read-uncommitted, start transaction
2、B执行start transaction,修改一条记录,
3、A查询记录,得到了以为正确的记录
4、B回滚。
问题:A读到了B没有提交的记录,也就是脏读。


 read-committed(已提交读)

测试流程:
1、A设置read-committed, start transaction
2、B执行start transaction,修改一条记录,查询记录,记录已经修改成功
3、A查询记录,结果还是老的记录
4、B提交事务
5、A再次查询记录,结果是新的记录。
问题:解决了脏读的问题,但是出现一个新问题,A在一个事务中,两次读取的记录不一致,也就是不可重复读。


repeatable-read(可重复读)
测试流程:
1、A设置repeatable-read, start transaction,查询记录,结果是老的记录
2、B执行start transaction,修改一条记录,查询记录,记录已经修改成功
3、A查询记录,结果还是老的记录
4、B提交事务
5、A再次查询记录,结果还是老的记录。
问题:可以重复读,A在事务过程中,即使B修改了数据,并且commit,A读取的还是老的数据。实际上是A读取的数据还是事务开始时的快照。
注意:这里可能会存在一个新的问题,A在事务过程中,B增加一条记录,并提交,导致A的两次读取不一致,会多一条记录,也就是幻影读。这里只是可能,具体取决于数据库的实现。mysql的repeatable-read实现,不会导致幻影读。


serializable(可串行化)
测试流程:
1、A设置serializable, start transaction,查询记录,结果是老的记录
2、B执行start transaction,修改一条记录,B卡在这里,要等待A完成才行。
3、A查询记录,结果还是老的记录,A提交。
4、B的修改操作才进行下去。
注意:B在等待过程中,会出现lock超时。这种情况,存在性能问题,因为要一个一个来。

 

转载于:https://www.cnblogs.com/nzbbody/p/4540765.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值