当前位置:网站首页 > 技术博客 > 正文

mysql数据库事务怎么写



        MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在银行管理系统中,用户张三向李四账户转账的操作,账户转账是一个完整的业务,最小的单元,不可再分,这样,完成转账操作的这些SQL语句之和就构成一个事务!

        总的来说,

  • 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
  • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
  • 事务通常用来管理 insert(增)、update(改)、delete(删) 语句。

事务是必须满足4个条件原子性、一致性、隔离性、持久性。

        1.原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。

        例如:当事务在执行过程中发生错误时,已经被修改过的数据会回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

        2.持久性:当一个事务处理结束后,会进行commit提交操作,将处理后的数据从内存提交到磁盘中,保证数据的持久化存储。

        3.一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则。

        4.隔离性:事务通常都是并发的,不同事务会同时对数据库中的数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

        事务的隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

  • START TRANSACTION :显式地开启一个事务;
  • COMMIT :事务提交,将事务更新后的数据从内存保存进磁盘中,实现数据的持久保存;
  • ROLLBACK :事务回滚,结束当前正在进行的事务,并将已经修改但未提交的数据回滚到事务开始之前的状态;
  • SAVEPOINT 【标记点】该指令允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;
  • RELEASE SAVEPOINT 【标记点】 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
  • ROLLBACK TO 【标记点】把事务回滚到标记点;
  • SET TRANSACTION 用来设置事务的隔离级别。 InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED(读未提交)、READ COMMITTED(读提交)、REPEATABLE READ(可重复读) 和 SERIALIZABLE(串行化)。

其中我们最常用的两条语句就是commit事务提交和rollback事务回滚。

业务情形:id为1的用户(张三) 给 id为2的用户(李四) 转账100元

①首先有一张bank的表,所有用户的钱初始值都是200元

②在不开启事物的情况下

1.模拟转张操作(SQL代码)

 
  

若未出现异常情况,该项转账业务成功执行;两个用户的钱发生正确变化;

2.模拟中途出现异常(SQL代码)

 
  

如图所示,若中途出现异常,执行失败:发现数据只更改了一半,张三的钱少了,但收款方李四账户并没有多出100元

 

        像上述这种情况,在实际项目开发中肯定是不允许出现的,因此我们可以借助Mysql数据库中的事务管理,将转账这两条SQL语句封装成一条事务,使其具有不可分割性(原子性);

③使用MySql中事务管理,来模拟转账操作

  • 当开启事务管理后,若执行过程中遇到异常,那么被修改但未提交的数据则会回滚到初始值;

执行之前,两人都是200元;

1.模拟开启事务后执行转账操作

 
  

当事务正常执行并提交(commit),两人的钱会发生对应的变化 

 

2.模拟转账操作执行过程中出现异常

 
  

当转账遇到异常时,进行事务回滚,两人的金额仍然是200元。

        通过以上的简单模拟,我们已经对事务有了一定了解;接下来让我们学习,如何在MyBatis中进行事务管理操作。

前提:已经构建好MyBatis框架

①.首先我们创建一个用户表,用户初始余额都为200元

②编写转账操作对应SQL语句:

 
  

③然后编写Dao层接口方法:

 
  

④最后是,转账业务的测试代码:

  • 无异常情况的情况下:
 
  
  • 模拟一个转账异常

 
  

⑤测试运行结果

  • 正常执行转张操作:

      

  • 若转账中途出现异常:

         当出现异常,转张操作会被中断,然后事务回滚;我们查看数据库,每个人的前仍为初始值200元。

        以上就是事务在实际开发过程中的应用,本篇文章是我在学习完数据库事务管理后的总结与笔记,如果大家喜欢,请多多点赞;若有错误,欢迎指正;

①脏读:

       ②不可重复读

   

参考文章:

MySQL——事务(Transaction)详解_mysql事务-CSDN博客

MySQL 事务 | 菜鸟教程

版权声明


相关文章:

  • libcurl3-gnutls2026-04-08 15:01:00
  • java中的单元测试怎么写2026-04-08 15:01:00
  • swagger springsecurity2026-04-08 15:01:00
  • 原型与原型链面试怎么答2026-04-08 15:01:00
  • arm内核的主要部件2026-04-08 15:01:00
  • 基于javaweb的学生管理系统2026-04-08 15:01:00
  • 归并排序c++代码2026-04-08 15:01:00
  • linux等待进程结束2026-04-08 15:01:00
  • c++语言程序设计2026-04-08 15:01:00
  • 线程锁有哪些锁2026-04-08 15:01:00