当前位置: 首页 > article >正文

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

各位编程宝子们(尤其是对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.kler.cn/a/488106.html

相关文章:

  • 详细分析 Git 分支重命名与同步操作
  • web作业
  • Sprint Boot教程之五十:Spring Boot JpaRepository 示例
  • uniapp实现后端数据i18n国际化
  • 用户界面软件02
  • 洛谷P1617————数字转英文
  • 14_Redis事务
  • 初学者关于对机器学习的理解
  • Go语言的循环实现
  • 基于 SpringBoot线上考试系统的设计与实现
  • java.lang.OutOfMemoryError: PermGen space报错处理
  • Autodl安装tensorflow2.10.0记录
  • Linux基本指令(1)
  • 【数据库】三、SQL语言
  • [IoT]物联网(IoT)网络的安全性
  • 量子技术的发展
  • ubuntu编译龙蜥6.6内核源码
  • Swin Transformer模型详解(附pytorch实现)
  • AAAI2023《Controllable Image Captioning via Prompting》
  • 小程序与内嵌网页的数据通信
  • 数据集-目标检测系列- 石榴 检测数据集 pomegranate >> DataBall
  • docker 安装 fastdfs
  • hive迁移后修复分区慢,怎么办?
  • 学前端 4 个月想进中厂,该怎么做?
  • Shader->LinearGradient线性渐变着色器详解
  • 如何提升scrapy的效率