事务的介绍和事务相关的Sql语句

一、事务的基本介绍

如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。事务又4大特性:

  • 原子性(Atomicity):事务是不可分割的最小操作单位,要么同时成功,要么同时失败。
  • 持久性(durability):当事务提交或回滚后,数据库会持久化的保存数据。
  • 隔离性(isolation):多个事务之间,相互独立。
  • 一致性(consistency):事务操作前后,数据总量不变。

二、事务的分类

  对于InnoDB 存储引擎来说,其支持扁平事务、带有保存点的事务、链事务、分布式事务。对于嵌套事务,其并不原生支持,因此,对有并行事务需求的用户来说,MySQL 数据库或InnoDB 存储引擎就显得无能为力了。然而用户仍可以通过带有保存点的事务来模拟串行的嵌套事务。

2.1、扁平事务

clipboard

2.2、带有保存点的扁平事务

clipboard

2.3、链事务

clipboard

2.4、嵌套事务

clipboard

2.5、分布式事务

  分布式事务( Distributed Transactions )通常是一个在分布式环境下运行的扁平事务,因此需要根据数据所在位置访问网络中的不同节点。

三、事务的控制语句

  MySQL 命令行的默认设置下,事务都是自动提交(auto commit )的,执行命令SET AUTOCOMMIT=0 ,禁用当前会话的自动提交。

START TRANSACTION 或者 BEGIN 显式地开启一个事务。存储过程中只能使用START TRANSACTION
COMMIT 相同点:会提交事务,并使得已对数据库做的所有修改成为永久性的。不同点:COMMIT WORK 用来控制事务结束后的行为是CHAIN 还是RELEASE 。如果是CHAIN 方式,那么事务就变成了链事务。通过参数completion_type进行控制,不同参数含义如下:0表示不进行任何操作;1表示COMMIT WORK=COMMIT AND CHAIN,马上开启一个相同隔离级别的事务;2表示COMMIT WORK=COMMIT AND RELEASE,在事务提交后会自动断开与服务器的连接。
ROLLBACK 与ROLLBACK WORK用法几乎相同,回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。
SAVEPOINT identifier 允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT
RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有一个保存点执行这句语句时,会抛出一个异常。
ROLLBACK TO SAVEPOINT identifier 与SAVEPOINT 命令一起使用。可以把事务回滚到标记点,而不回滚在此标记点之前的任何工作。ROLLBACK TO SAVEPOINT只回滚,不会真正的结束事务。
SET TRANSACTION 这个语句用来设置事务的隔离级别。InnoDB 存储引擎提供的事务隔离级别有: READ UNCOMMITTED、READ COMMITTED 、REPEATABLE READ 、SERIALIZABLE
3.1、隐式提交的SQL语句

clipboard

四、事务的隔离级别

  • READ UNCOMMITTED
  • READ COMMITTED,在一次事务中,对于快照数据,一致性非锁定读总是读取被锁定行的最新一份快照数据。
  • REPEATABLE READ,InnoDB 存储引擎下可以达到3°隔离,在一次事务中,对于快照数据,一致性非锁定读总是读取被锁定行事务开始时的快照数据。
  • SERIALIZABLE,不支持一致性非锁定读,InnoDB 存储引擎会对每个SELECT 语句后自动加上LOCK IN SHARE MODE ,即为每个读取操作加一个共享锁。
posted @ 2026-03-27 22:27  Carey_ccl  阅读(14)  评论(0)    收藏  举报