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 对标的.


感谢阅览。

相关推荐

  1. MySQL事务隔离级别

    2024-07-12 16:02:02       34 阅读
  2. mysql事务隔离级别JDBC

    2024-07-12 16:02:02       23 阅读
  3. MySQL事务隔离级别

    2024-07-12 16:02:02       51 阅读
  4. MySQL 事务隔离级别

    2024-07-12 16:02:02       28 阅读
  5. spring 事务隔离级别

    2024-07-12 16:02:02       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 16:02:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 16:02:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 16:02:02       58 阅读
  4. Python语言-面向对象

    2024-07-12 16:02:02       69 阅读

热门阅读

  1. springboot把 EXCEL 文件以流的形式返回给前端

    2024-07-12 16:02:02       23 阅读
  2. Github 2024-07-09 Python开源项目日报 Top10

    2024-07-12 16:02:02       19 阅读
  3. 2.HTML学习

    2024-07-12 16:02:02       22 阅读
  4. “存算分离“和“湖仓一体“

    2024-07-12 16:02:02       17 阅读
  5. 对数据采集、数据存储和数据处理流程

    2024-07-12 16:02:02       18 阅读