MySql 和 Spring 中事务的隔离级别

🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇

                                ⭐ 事务隔离级别 ⭐

🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇


前言

这一部分有点八股的味,面试常问.


1. MySQL事务隔离级别

SQL标准定义了四种隔离级别,MySQL全都⽀持.这四种隔离级别分别是:

1. 读未提交(READUNCOMMITTED): 读未提交 ,也叫未提交读.该隔离级别的事务可以看到其他事务中 未提交的数据.

问题: 因为其他事务未提交的数据可能会发⽣回滚,但是该隔离级别却可以读到,我们把该级别读到的数 据称之为脏数据,这个问题称之为脏读.

2. 读提交(READCOMMITTED): 读已提交,也叫提交读. 该隔离级别的事务能读取到已经提交事务的数 据, 该隔离级别不会有脏读的问题.

问题: 在事务的执⾏中可以读取到其他事务提交的结果,所以在不 同时间的相同SQL查询可能会得到不同的结果,这种现象叫做不可重复读

3. 可重复读(REPEATABLEREAD): 事务不会读到其他事务对已有数据的修改,即使其他事务已提交.也 就可以确保同⼀事务多次查询的结果⼀致.

问题: 但是其他事务新插⼊的数据,是可以感知到的.这也就引 发了幻读问题.可重复读,是MySQL的默认事务隔离级别. ⽐如此级别的事务正在执⾏时,另⼀个事务成功的插⼊了某条数据,但因为它每次查询的结果都是 ⼀样的,所以会导致查询不到这条数据,⾃⼰重复插⼊时⼜失败(,因为唯⼀约束的原因,两个事务插入的主键设为同一个). 明明在事务 中查询不到这条信息,但⾃⼰就是插⼊不进去,这个现象叫幻读.

4. 串⾏化(SERIALIZABLE):序列化,事务最⾼隔离级别.它会强制事务排序,使之不会发⽣冲突,从⽽解 决了脏读,不可重复读和幻读问题,但因为执⾏效率低,所以真正使⽤的场景并不多.


2. Spring 中事务的隔离级别

Spring 中事务隔离级别有5种:

1. Isolation.DEFAULT :以连接的数据库的事务隔离级别为主.

2. Isolation.READ_UNCOMMITTED :读未提交

3. READ UNCOMMITTED Isolation.READ_COMMITTED :读已提交

4. Isolation.REPEATABLE_READ :可重复读

5. Isolation. SERIALIZABLE:串行化,

上边都是 和 mysql 对标的.


感谢阅览。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值