spring 注解事务的使用、mysql 事务的隔离级别

参考:
MySQL的四种事务隔离级别
Spring 事务 – @Transactional的使用

一、Spring注解事务的使用、事务失效的场景

SpringBoot 中 @Transactional 注解的使用与实践、失效场景
另:事务不生效的特殊场景:
https://blog.csdn.net/weixin_47007127/article/details/115397234
在这里插入图片描述

@Transactional 注解必须添加在public方法上,private、protected方法上是无效的 在使用@Transactional 的时候一定要记住,在private,protected方法上添加@Transactional 注解不会有任何效果。相当于没加一样。即使外部能调到protected的方法也无效。和没有添加@Transactional一样。

二、spring 注解事务属性的详细说明

Spring Boot之事务(事务传播机制、嵌套事务、事务隔离机制详解)

三、隔离规则

   隔离级别定义了一个事务可能受其他并发事务影响的程度。

在实际开发过程中,我们绝大部分的事务都是有并发情况。下多个事务并发运行,经常会操作相同的数据来完成各自的任务。在这种情况下可能会导致以下的问题:

脏读(Dirty reads)—— 事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。
不可重复读(Nonrepeatable read)—— 事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。
幻读(Phantom read)—— 系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

spring 事务隔离

在这里插入图片描述

事务隔离级别为ISOLATION_REPEATABLE_READ时,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是next-key锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。

spring boot中的 @Transactional(rollbackFor = Exception.class)使用默认的隔离级别Isolation.DEFAULT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot中开启MySQL事务可以通过以下步骤实现: 1. 首先,在你的Spring Boot应用的配置文件(如application.properties或application.yml)中添加MySQL数据库的连接信息,包括数据库URL、用户名和密码。 2. 创建一个标注了`@Transactional`注解的方法或类。这个注解可以应用在方法级别或类级别,用于开启事务。当方法或类上标注了`@Transactional`注解时,Spring会自动管理这些方法或类的事务。 3. 在需要开启事务的方法中,可以使用各种数据库操作的注解(如`@Insert`、`@Update`、`@Delete`等),或者使用JdbcTemplate进行数据库操作。 4. 在执行数据库操作的方法上,如果抛出了异常,Spring会自动回滚事务。如果方法执行成功,则事务会被提交。 下面是一个示例代码: ```java @Service public class UserService { @Autowired private JdbcTemplate jdbcTemplate; @Transactional public void createUser(String username, String password) { // 执行数据库操作,插入用户信息 jdbcTemplate.update("INSERT INTO user(username, password) VALUES (?, ?)", username, password); } } ``` 在上述示例中,通过`@Transactional`注解标注了`createUser`方法,该方法会在插入用户信息时开启事务。如果插入过程中出现异常,事务会被回滚,保证数据的一致性。 需要注意的是,为了使用事务管理,你需要在Spring Boot应用的依赖中添加`spring-boot-starter-data-jpa`或`spring-boot-starter-jdbc`等相关依赖。同时,确保在配置文件中正确配置了MySQL数据库连接信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值