灵活运用事务回滚,快捷处理多张数据表格

news2025/1/11 18:41:29

各位编程宝子们(尤其是对MySQL了解不多的宝子们)在使用关系表处理时,有时候会希望简单一次性解决多张表的数据处理,但又有时候无从下手。其实有时候掌握数据的事务和回滚便可以简单解决这些事情,接下来我将以一个学生信息操作为例,向各位详细从数据库设计,以及数据从后端到前端来简要介绍如何让事务解决这类问题。

技术栈:

MySQL、前端:html+bootstarp+jQuery,后端:Java原生Maven

事务介绍:

事务是个什么东东泥?简单来说,事务是一组数据库操作的逻辑单元,这些操作要么全部成功执行,要么全部不执行。在关系型数据库管理系统(RDBMS)中,事务是一个非常重要的概念,它确保了数据的一致性和完整性。就像一个包裹,里面装着一系列的数据库操作指令,这个包裹要么完整地被执行(所有操作都成功),要么就根本不执行(只要有一个操作失败,整个包裹就取消执行)。

示例介绍:

1.数据库设计

首先我们在MySQL里面设计了三张小小的表:学生信息表、班级信息表、学生及班级关系表

这里我们在关系表内使用级联删除,便于我们在删除学生信息或者班级信息时不需要再再关系表内多出解除绑定的一步

2.Java后端dao接口及实现类设计
首先是修改方法:

代码解释:

  • updateStudent(Student student) 方法
    • 功能:负责更新学生信息,同样使用事务。先更新 students 表中的学生基本信息,然后检查更新后的班级编号在 classNum 表是否存在,若存在则更新 stuAndCls 表中的学生与班级关联信息,最后提交事务,根据受影响的行数返回更新结果。
    • 优点
      • 事务保障:和添加学生方法一样,利用事务保证更新操作的原子性,多个相关数据表的更新操作要么同时成功,要么同时失败,防止出现数据更新不同步的问题。
      • 逻辑清晰:把更新学生涉及的多表操作按顺序依次执行,代码逻辑一目了然,易于理解与扩展,后续再有新的更新需求,能快速定位并修改代码。
添加方法:

代码解释:

  • addStudent(Student student) 方法
    • 功能:该方法实现了向学生管理系统中添加学生的逻辑,涉及多张表的操作,包括 students 表、classNum 表和 stuAndCls 表。整个过程使用事务来保证数据的一致性,先向 students 表插入学生基本信息,获取生成的 studentId,接着检查目标班级编号在 classNum 表是否存在,存在则向 stuAndCls 表插入学生与班级的关联记录,最后提交事务。
    • 优点
      • 数据完整性:通过事务机制,要么所有数据库操作都成功提交,要么在出现异常时全部回滚,避免了数据不一致的情况,例如学生基本信息插入了,但关联班级信息没插入成功这种尴尬局面。
      • 代码模块化:将添加学生这个复杂流程封装在一个方法内,使得代码结构清晰,便于维护和调试,如果后续添加学生逻辑有变动,只需要修改这一处代码。
两个删除方法:

1>

2>

代码解释:

  • deleteStudent(int id) 方法
    • 功能:实现删除单个学生的功能,借助事务,仅删除 students 表中的学生记录,由于数据库设置了级联删除,与之关联的 stuAndCls 表记录会自动清除,操作完成后提交事务。
    • 优点
      • 简单高效:利用数据库级联删除特性,简化了代码逻辑,只需要关注 students 表的删除操作即可,减少了不必要的关联表手动删除代码,提升了执行效率。
      • 事务管理:依旧使用事务,在出现异常时能回滚删除操作,避免误删数据造成数据丢失。
  • deleteStudent(String[] ids) 方法
    • 功能:批量删除学生,遍历传入的学生 id 数组,逐个删除 students 表中的对应记录,依赖数据库级联删除机制处理关联表,在所有删除操作完成后提交事务,若中途出错则回滚。
    • 优点
      • 批量处理:支持一次删除多个学生记录,提升了管理员清理数据的效率,适用于需要大规模删除学生信息的场景。
      • 错误回滚:全程在事务管控下,只要有一个 id 的删除操作失败,就会回滚整个批量删除流程,保证数据的稳定性与安全性。

看到这,你就学会了如何巧妙地使用事务进行对数据库数据的灵活操作啦!学会事务处理在未来无论是数据库方面还是后端方面都是一个很重要的事件噢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2275046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用C# CEFSharp在WPF中开发桌面程序实现同一网站多开功能

在网络商业运营领域,同时运营多个淘宝店铺的现象屡见不鲜。为了满足这一需求,实现同一网址的多开功能变得尤为关键。这一需求虽然实用,但实现起来却面临诸多挑战。在这个过程中,技术人员们也经历了不少喜怒哀乐。 开发经历回顾 …

CompletableFuture // todo

相比较所有代码都在主线程执行,使用Future的好处:利用服务器多核、并发的优势。 不足: 开启没有返回值的异步线程: 1、runAsync 使用lambda表达式: 开启有返回值的异步线程: 1、supplyAsync 异步任务中的…

如何评价deepseek-V3 VS OpenAI o1 自然语言处理成Sql的能力

DeepSeek-V3 介绍 在目前大模型主流榜单中,DeepSeek-V3 在开源模型中位列榜首,与世界上最先进的闭源模型不分伯仲。 准备工作: 笔者只演示实例o1 VS DeepSeek-V3两个模型,大家可以自行验证结果或者实验更多场景,同时…

ASP.NET Core 实现微服务 - Consul 配置中心

这一次我们继续介绍微服务相关组件配置中心的使用方法。本来打算介绍下携程开源的重型配置中心框架 apollo 但是体系实在是太过于庞大,还是让我爱不起来。因为前面我们已经介绍了使用Consul 做为服务注册发现的组件 ,那么干脆继续使用 Consul 来作为配置…

tdengine数据库使用java连接

1 首先给你的项目添加依赖 <dependency> <groupId>com.taosdata.jdbc</groupId> <artifactId>taos-jdbcdriver</artifactId> <version>3.4.0</version> <!-- 表示依赖不会传递 --> </dependency> 注意&am…

深入学习RabbitMQ的Direct Exchange(直连交换机)

RabbitMQ作为一种高性能的消息中间件&#xff0c;在分布式系统中扮演着重要角色。它提供了多种消息传递模式&#xff0c;其中Direct Exchange&#xff08;直连交换机&#xff09;是最基础且常用的一种。本文将深入介绍Direct Exchange的原理、应用场景、配置方法以及实践案例&a…

51单片机——串口通信(重点)

1、通信 通信的方式可以分为多种&#xff0c;按照数据传送方式可分为串行通信和并行通信&#xff1b; 按照通信的数据同步方式&#xff0c;可分为异步通信和同步通信&#xff1b; 按照数据的传输方向又可分为单工、半双工和全双工通信 1.1 通信速率 衡量通信性能的一个非常…

本地手集博客id“升级”在线抓取——简陋版——(2024年终总结1.1)

我之前每每发布笔记都用csv纯文本记录&#xff0c;一个机缘巧得文章列表api实现在线整理自已的文章阅读量数据。 (笔记模板由python脚本于2025年01月10日 18:48:25创建&#xff0c;本篇笔记适合喜欢钻牛角尖的coder翻阅) 【学习的细节是欢悦的历程】 Python官网&#xff1a;htt…

高等数学学习笔记 ☞ 洛必达法则与泰勒公式

1. 洛必达法则 1. 型与型未定式&#xff08;洛必达法则&#xff09; &#xff08;1&#xff09;型&#xff1a;若函数同时满足以下条件&#xff1a; &#xff08;2&#xff09;型&#xff1a;若函数同时满足以下条件&#xff1a; ①&#xff1a;当时&…

Qt官方下载地址

1. 最新版本 Qt官方最新版本下载地址&#xff1a;https://www.qt.io/download-qt-installer 当前最新版本Qt6.8.* 如下图&#xff1a; 2. 历史版本 如果你要下载历史版本安装工具或者源码编译方式安装&#xff0c;请转至此链接进行下载&#xff1a;https://download.qt.i…

怎么用NodeJS脚本对接TTS播报音响

怎么用NodeJS脚本对接TTS播报音响呢&#xff1f; 本文描述了使用NodeJS脚本调用HTTP接口&#xff0c;对接TTS播报音响&#xff0c;。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能语音音柱|10W统软物联2智能语音壁挂音箱|款式…

计算机存储之图解机械硬盘

问&#xff1a;机械硬盘是如何工作的&#xff1f; 答&#xff1a;请看VCR 一、机械硬盘物理结构 1.1、盘片(platter) 视频中银白色的圆盘称为盘片&#xff0c;二进制数据就是存储在盘片上&#xff0c;盘片解剖后如下图所示&#xff1a; 一圈一圈的同心圆称为磁道&#xff08;…

HTML前端从零开始

第一天 HTML部分 什么是HTML HTML&#xff08;Hypertext Markup Language&#xff09;超文本标记语言。HTML是万维网的基石。 超&#xff1a; 超字第一层意义是指最重要的标签&#xff0c;超链接标签 超越文本的意思 HTML的发展历程 HTML1990年出现&#xff0c;web之父…

moviepy 将mp4视频文件提取音频mp3 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

【Leetcode-移动零】利用将非零元素移动至数组前解决移动零问题(剪枝优化)

题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例1 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例2 输入: nums [0] 输出…

浅析大语言模型安全和隐私保护国内外标准和政策

过去两年&#xff0c;大模型技术已经普及并逐步渗透到各行各业&#xff0c;2025年注定是大模型应用井喷式发展的一年&#xff0c;AI在快速发展的同时&#xff0c;其带来的安全风险也逐渐凸显。人工智能系统的安全性和隐私保护已经成为社会关注的重点。 附下载&#xff1a;600多…

第21篇 基于ARM A9处理器用汇编语言实现中断<三>

Q&#xff1a;怎样编写ARM A9处理器汇编语言代码配置按键端口产生中断&#xff1f; A&#xff1a;使用Intel Monitor Program创建中断程序时&#xff0c;Linker Section Presets下拉菜单中需选择Exceptions。主程序在.vectors代码段为ARM处理器设置异常向量表&#xff0c;在…

直流无刷电机控制(FOC):电流模式

目录 概述 1 系统框架结构 1.1 硬件模块介绍 1.2 硬件实物图 1.3 引脚接口定义 2 代码实现 2.1 软件架构 2.2 电流检测函数 3 电流环功能实现 3.1 代码实现 3.2 测试代码实现 4 测试 概述 本文主要介绍基于DengFOC的库函数&#xff0c;实现直流无刷电机控制&#x…

(四)结合代码初步理解帧缓存(Frame Buffer)概念

帧缓存&#xff08;Framebuffer&#xff09;是图形渲染管线中的一个非常重要的概念&#xff0c;它用于存储渲染过程中产生的像素数据&#xff0c;并最终输出到显示器上。简单来说&#xff0c;帧缓存就是计算机图形中的“临时画布”&#xff0c;它储存渲染操作生成的图像数据&am…

Linux离线部署ELK

文章目录 前期准备开始安装安装elastic search安装logstash安装kibana 配置ELK配置ElasticSearch配置logstash配置kibana 启动ELK启动命令启动测试 设置ELK策略创建ILM策略将ILM策略与日志index关联查看索引是否被ILM策略管理 前期准备 ELK包含三部分软件 ElasticSearch用作搜…