关于Mysql事务,你必须知道的几个知识点!

SLG大地图实战:从Tilemap到Shader的地表渲染与数据分层架构 本文深入探讨了SLG大地图开发中的关键技术挑战与解决方案,包括Tilemap系统的深度改造、地表渲染的Shader优化以及数据分层架构设计。通过实战案例,展示了如何实现视觉表现丰富、性能开销可控的SLG大地图,特别适合Unity开发者和游戏技术美术参考。 阅读详情

Transaction事务

上期我们讲到了jpa的常用操作,查询、更新、删除等,但是如果在操作数据库事务时发生异常,数据会回滚吗?下面我们来看个例子

UserController新增如下代码:
@GetMapping("save1")

public String save1(){
    User user = new User();
    user.setDptId(1L);
    user.setName("a");
    user.setAge(18L);
    user.setEmail("a@a.com");
    user.setHeadImg("headImg1");

    this.userJpa.save(user);
    //模拟发生了异常
    System.out.println(1/0);
    return "ok";
}

使用postman请求

localhost:8080/user/save1

执行之后可以看到java后台报错了,postman前台也报出来错误,但是数据却保存进去了,数据新增了一条记录

说明即使发生了异常,数据还是会保存进去数据库,那应该怎么办呢?试试在save1方法上加一个**@Transactional**的注解。

我们再执行一次。发现错误也报出来了,但是数据库并没有将新数据插入进去,最新的还是上一次的id为7的记录,那么 Transactional注解是干嘛的呢?

@Transactional是声明式事务管理编程中使用的注解

  1. 该注解是添加在实现类或者接口实现方法上,而不能放在接口中
  2. 需要注意的是这个注解只对public方法生效

如下是该注解的属性,我们需要关注重点关注的是rollback-for和propagation两个属性。

属性名说明
name当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器。
propagation事务的传播行为,默认值为 REQUIRED。
isolation事务的隔离度,默认值采用 DEFAULT。
timeout事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务。
read-only指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true。
rollback-for用于指定能够触发事务回滚的异常类型,如果有多个异常类型需要指定,各类型之间可以通过逗号分隔。
no-rollback- for抛出 no-rollback-for 指定的异常类型,不回滚事务。

rollback-for:只有执行的异常才回滚。但是我们刚刚的程序并没有指定异常,那是默认的是遇到什么样的异常会回滚呢?

  1. 将UserController中的代码稍作修改,手动throw new Exception("test"),再执行下postman,发现事务提交了,并没有回滚。
  2. 接着我们将注解修改为@Transactional(rollbackFor = Exception.class),再执行postman,事务却回滚了,并没有提交,什么原因?
  3. spring的@Transactional注解可以很方便的开启事务,但是默认只在遇到运行时异常和Error时才会回滚,非运行时异常不回滚,即Exception的子类中,除了RuntimeException及其子类,其他的类默认不回滚。
  4. 而rollbackFor属性可以解决这个问题,rollbackFor = Exception.class表示Exception及其子类的异常都会触发回滚,同时不影响Error的回滚。

propagation:这个用得最广的需求就是业务出错了,但是日志必须提交到数据库。怎么处理?来看下面的代码。

新增LogService类
@Service

public class LogService {
    @Resource
    private UserJpa userJpa;

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void saveLog(){
        User user = new User();
        user.setDptId(1L);
        user.setName("log");
        user.setAge(18L);
        user.setEmail("log@log.com");
        user.setHeadImg("log");

        this.userJpa.save(user);
        System.out.println("log");
    }
}
新增UserService类:
@Service

public class UserService {
    @Resource
    private UserJpa userJpa;
    @Resource
    private LogService logService;

    @Transactional(rollbackFor = Exception.class)
    public void saveBiz() throws Exception {
        System.out.println("save2");
        User user = new User();
        user.setDptId(1L);
        user.setName("biz");
        user.setAge(18L);
        user.setEmail("biz@biz.com");
        user.setHeadImg("biz");

        this.userJpa.save(user);

        //模拟保存日志
        this.logService.saveLog();
        //模拟发生了异常
        throw new Exception("test1");
    }
}
UserController新增代码
@GetMapping("save2")

public String save2() throws Exception {
    //模拟业务操作
    this.userService.saveBiz();
    return "ok";
}

postman执行下,是不是只有log的那条记录插入进去了?biz的没有插入进去。

注意:同一个业务类里面 , 即使声明为 Propagation.REQUIRES_NEW也不会新启一个事务。必须调用另一个类的Propagation.REQUIRES_NEW方法才行。所以样例中是使用UserService里面调用另一个类LogService中的saveLog的方法。

参考资料:https://javawu.com/archives/2755

【即插即用模块】注意力篇 | TGRS 2025 | CDFIM:通道+空间多尺度注意力,双模态特征融合增强,性能翻倍! C2DFF-Net提出了一种轻量级跨模态特征融合模块CDFIM,通过模态差异感知和多尺度深度滤波增强双模态互补信息。该模块采用通道-空间注意力协同机制,以极低计算成本(仅增加0.26M参数)提升多模态目标检测性能,在三个遥感数据集上平均提升mAP约1.7%。适用于无人机等边缘设备的实时检测任务,为跨模态融合提供高效解决方案。 阅读详情

相关推荐

LSTM cell结构的理解和计算

LSTM是传统RNN网络的扩展,其核心结构是其cell单元,网上LSTM的相关资料繁多,质量参差不齐,下面主要结合LSTM神经网络的详细推导和 Christopher Olah的blog两篇文章中的内容进行说明。主要介绍网络如何计算,为何这么算先不展开:)。前者一副图加上29个公式,简洁明了;后者娓娓道来,适合初学者。首先是LSTM cell最常见的结构图: 这是变形的版本(找不到更清晰的版本了),

songhk0209的博客 2万+

mysql事务和注意事项

一、事务 用于保证数据的一致性,由一组相关的dml语句组成,这组dml语句要么全部成功,要么全部失败。 二、事务和锁 当执行事务操作时(dml语句),mysql会在表上加锁,防止其它用户改表的数据,对用户来说十分重要。 mysql数据库控制台事务的重要操作 1.start transaction -- 开始一个事务 2.savepoint 保存点名 -- 设置保存点 3.rollback to保存点名-- 回退事务 4.rollback -- 回退全部事务 5.commit -- 提.

qq_46093575的博客 514

【OpenCV】复杂场景下的高精度圆检测实战(附完整代码)

本文针对OpenCV霍夫圆检测在复杂场景下易失效的问题,提出了一套基于轮廓分析的高精度圆检测实战方案。通过图像预处理、轮廓发现及多轮几何筛选(面积、周长、椭圆拟合、多边形逼近),有效排除噪声和类圆干扰物,显著提升复杂场景下的检测鲁棒性,并附完整可调参的Python代码实现。

weixin_29095587的博客 201

mysql特性举例_MySql的事务使用与示例详解

在MySQL中,事务就是一个逻辑工作单元的一系列步骤。事务是用来保证数据操作的安全性。事务的特征:1.Atomicity(原子性)2.Consistency(稳定性,一致性)3.Isolation(隔离性)4.Durability(可靠性)注:事务只针对对数据数据产生影响的语句有效。show engines //查看mysql锁支持的数据引擎MyISAM不支持事物,InnoDB支持事物默认情况下,...

weixin_39806808的博客 245

利用Matlab绘制非线性系统相图:从理论到实践

本文详细介绍了如何利用Matlab进行非线性系统的相图绘制与相平面分析。从理论基础的状态空间转换出发,通过无阻尼线性谐振子和范德波尔振荡器等实例,手把手演示了使用ode45求解器绘制相图、分析平衡点与极限环的完整流程,并分享了方向场绘制、参数分岔探索及常见错误解决方案等高级技巧,为动力学系统分析与控制设计提供了直观强大的可视化工具。

yhn456789的博客 908

薛定谔虚拟筛选实战:如何用PDB文件快速构建受体格点(避坑指南)

本文提供了薛定谔虚拟筛选实战指南,聚焦于如何从PDB文件快速、精准地构建受体格点。文章详细解析了可变残基的理性处理策略、基于配体尺寸的盒子量化设置方法,并分享了高级约束与排除体积的实战技巧,旨在帮助用户避开常见陷阱,提升虚拟筛选的成功率与效率。

weixin_28419039的博客 254

【Day32】mysql中事务的一些注意的地方

最近很多朋友都在讨论mysql事务的问题,记得以前在博客中提过,今天我们详细的总结一下mysql的事务机制,首先从概念,属性,使用方法,优点几个方面来说:概念:那什么是事务呢, 事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开

Leslie 752

网表导入virtuoso后发现pg pin忘记connect_pg_net/globalNetConnect怎么办?

数模混合项目中经常需要一些需要到virtuoso去连接的线,比如IO上的pg和一些信号线,除了在pr工作中设置skip route之外还需要做好net的赋值,告诉工具虽然我没在物理上有连接,但是实际上应该连什么net,这部分提现在网表里。在Default Net Name中也填写net name,因为这个net需要做global操作,即在顶层定义这个net,所以需要在net name后加个!打开schematic,删除指定cell pin所接net的label。

m0_61544122的博客 970

mysql事务处理_MySQL事务处理问题的正确解决

如果你研究到库存系统的开发问题时,你就会从这里出发考虑了一些有关库存信息中需要的操作和,一般的情况下会遇到的MySQL事务处理问题。特别是关于数据表锁定问题,一旦出现并发现象的时候,我们如何保证数据的完整性,值得我们考虑。事务操作,要保证的三个原则性:原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全部执行,要么全都不执行;一致性(Consistent):在事务开始和完成...

weixin_30600605的博客 258

SAP 权限配置(复合角色)

复合角色创建步骤:业务场景:通常单一角色权限颗粒度划分比较细,当需要分配单一角色权限A、B(多个单一角色)给某账号用户Y时,可以先建立一个复合角色C,将A、B绑定到复合角色C中,再将角色C分配给账号Y即完成权限配置。 业务模拟: 1、PFCG创建复合角色: 2、在角色页面添加子角色 在角色分页内添加子角色,点击“菜单”分页中的“读菜单”即可导入子角色中的菜单: 3、将用户分配给...

willieyuan的博客 7087

Cesium教程(十七):淹没分析

淹没分析是根据某片区域的地形及洪水流量速度,动态模拟该地形区域水位逐渐上涨的淹没过程。该功能可适用于山区、丘陵等地形起伏较大区域,模拟洪水涨到安全限定高度的淹没过程,为防洪水救灾提供一定的参考。此外,还可以为河谷地带修建水利工程设计与选址提供参考依据。

WwLK123的博客 3009

关于MySQL的事务和使用注意等

MySQL Oracle 默认事务级别 可重复读(Repeatable read) 已提交度(Read committed) 读数据一致性 事务级 语句级 事务级别问题 幻读,由于GAP锁的存在,可以解决幻读的情况。 不可重复读,幻读 事务加解锁情况 事务处理阶段只加锁,commit时才进行解锁 MVCC (读可不加锁,读写不冲突,乐观锁) repeatable read级别下,总是读取当前 事务开始时的 ...

程序员的日常学习 505

matlab SAR图像的多视滤波

单视复数数据(Single Look Comple)是原始的最高分辨率数据,但是从单个像元散射的雷达回波信号的相干叠加,导致强度信息有很多噪声。SAR的多视处理是对SLC数据方位向和/或距离向做平均,得到的结果是多视后的强度数据。多视处理可以提高SAR图像的信噪比,有效抑制斑点噪声,但是会降低方位分辨率。

点云侠的博客 534

MySQL中的事务(如果想知道MYSQL中有关事务的知识,那么只看这一篇就足够了!)

MySQL中的事务(如果想知道MYSQL中有关事务的知识,那么只看这一篇就足够了!)

秋刀鱼不做梦的编程日常 5950

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MySQL事务,这篇文章就够了

原文链接:https://blog.ouyangsihai.cn/ >> MySQL事务,这篇文章就够了 在看这篇文章之前,我们回顾一下前面的几篇关于MySQL的系列文章,应该对你读下面的文章有所帮助。 InnoDB与MyISAM等存储引擎对比 面试官问你B树和B 树,就把这篇文章丢给他 MySQL的B 树索引的概念、使用、优化及使用场景 MySQL全文索引最强教程 MySQ...

好好学java 6065

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MySQL事务-知识点总结

MySQL事务-知识点总结1. 什么是事务2. 理解事务 - (用转账操作示例)3. 事务的使用4. 事务的四大特性(ACID)MySQL 事务隔离级别有 4 种(重要) 1. 什么是事务 事务(Transaction)是将⼀组操作封装成⼀个执⾏单元(封装到⼀起),这⼀个执⾏单元要么⼀起执⾏ 成功,要么⼀起失败,不会出现执⾏“⼀半”的情况。 一个最小的执行单元;通常一个事务对应一个完整的业务(例如银行的转账业务,只有转出者金额的减少对应到接收者金额增多这样一个不会从中间断开的一个动态平衡的过程,也就是一个

weixin_46448719的博客 2473

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【MySQL系列】MySQL事务知识点

事务的特性 ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性) Atomicity:原子性,执行的最小单元,不可拆分。 Consistency:一致性,事务在执行DML操作时,要么成功,要么失败。 Isolation:隔离性。两个事务执行具有隔离性。 Durability:持久性。事务执行以后,对数据库的影响是持久的。 mysql事务常用的命令 开启事务:两个都可以 begin; start transaction;

weixin_42246822的博客 944

招人了!MySQL 面试必须掌握的 8 个知识点!

上周末和在北京的哥们国仔涮火锅,席间聊起了最近面试的经历。他说想换工作的原因很简单,就是要涨工资,原来的公司呆了两年多,薪资浮动不超过 500 元。而身边跳槽的那些同事,薪资都已经是自己...

优快云资讯 3040

MySQL事务回滚机制:揭秘面试必看知识点

这篇文章深入解析MySQL事务回滚机制的核心原理,包括事务ACID特性、redo日志与undo日志的作用,以及常见面试问题如“如何实现事务回滚”、“系统崩溃时如何处理未提交事务”等。同时,我们还会探讨事务隔离级别对回滚的影响及实际应用中的注意事项。掌握这些知识点,不仅能让你在面试中脱颖而出,更是保障数据一致性的关键技能!

yanpeng2580的博客 1551

MySQL高级篇知识点——MySQL 事务日志

MySQL 事务日志

代码星辰的博客 4394

MySQL事务演示以及解决并发事务问题

这里通过一个转账的案例来进行事务的演示首先我们创建一个表,创建对应的字段,我这里表名为account,字段分别是id(主键),name,account,具体的建表语句和示例数据如下然后,我们进行第一种方式的演示MySQL默认是开启自动提交模式的,这意味着每个单独的SQL语句都被视为一个独立的事务并自动提交。你可以通过查询系统变量来检查当前的自动提交状态,这里执行代码MySQL默认该值为1,也就是说我们写的每一条SQL语句执行完都会自动提交。这里我们可以修改其值为0。

lv05121207的博客 2266

MySQL事务知识点梳理

事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。它由一组dml语句组成,且这些语句在逻辑上存在一些相关性为了便于大家更好的理解事务是什么,大家可以去看下面这个例子示例:你毕业了, 学校的教务系统后台 MySQL 中,不在需要你的数据,要删除你的所有信息(一般不会:) ), 那么要删除你的 基本信息(姓名,电话,籍贯等)的同时,也删除和你有关的其他信息注意:一个完整的事务,绝对不是简单的 sql 集合,还需要满足它的四个属性。

2302_80418176的博客 1050

MySQL:事务知识点盘点

本篇内容包括:MySQL 事务概念、MySQL 事务隔离级别以及MySQL 事务隔离的实现

栗筝i的博客 4982
上一篇: 如何优雅的实现Mysql 增删改查,看完你就会了
下一篇: Spring注解这么写,团队协作效率至少提升1倍
大盛玩java
博客等级 码龄5年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值