Mysql设置事务隔离级别解说(主演:咖啡汪,隔壁加菲猫)

不可重复读:一个事务范围内,两个相同的查询却返回了不同的结果;
重复读: 一个事务执行期间,不允许另一个事务执行update操作;
eg:加菲早上借了汪哥的卡,说是下午去买包包,卡里有1000元
1、执行查询操作:加菲借卡时当面查了卡里余额:1000元
2、执行update操作:结果中午本汪出去吃饭时,和隔壁柴犬互相挑衅,一时没忍住干了一架,把他咬伤了
于是乎,用手机把卡里的钱,全陪给柴犬媳妇了。
3、执行查询操作:加菲挑好了包包,付款时发现卡里余额:0元,直接炸毛了,于是乎汪哥帅气的脸,当天晚上就被猫爪挠得。。。。。。惨不忍睹
关键:卡从给了加菲的那一刻起,本汪就不能再用里面的钱了

脏读:一个事务可以读取另一个事务未提交的数据;一旦另一个事务进行回滚,所读数据即是脏数据;

eg:
加菲上个月从汪哥这儿借走200元,但她压根儿没想还,所以开始行骗,心机喵都这样

1.事务开始:
2.执行update操作:加菲往汪哥账户打了200元。然后立刻告诉本汪去查
3.执行查询操作:本汪查卡,确实多了200元,就以为加菲已经还钱了,就把借条还给了加菲
4.执行回滚rollback:加菲拿到借条后,立即回滚
本汪说明:此时由于事务还未提交,钱并没有真的到汪哥账户,所以允许回滚,加菲rollback后
5.本汪约了汪友一起撸串,付款时发现钱不够,聪明如本汪,于是乎借机省了200元串钱,哈哈哈
关键点:正常情况下‘操作3’查询的结果是不会多那200元的,未提交的数据查不到才对

事务的隔离级别共四种:
1)read uncommitted : 读取尚未提交的数据 :就是脏读
2)read committed:读取已经提交的数据 :可以解决脏读
3)repeatable read:重读读取:可以解决脏读 和 不可重复读
4)serializable:串行化:可以解决 脏读 不可重复读 和 虚读—相当于锁表

mysql默认的是repeatable read

查询Mysql默认隔离级别
select @@global.tx_isolation,@@tx_isolation;
设置Mysql隔离级别read committed
set global transaction isolation level read committed;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖啡汪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值