原创

Mysql事务1


在我刚开始学习数据库事务时,一直就晕晕呼呼的,今天总结下。 主要回顾以下几个方面:

  1. Mysql事务:事务的概念,事务实现原理,4大特性,3大并发问题,4大隔离级别,只读事务;
  2. Jdbc事务: Jdbc的事务API;
  3. Mybatis事务: Mybatis的事务管理机制;
  4. Spring事务: 声明式/编程式事务,4种隔离级别, 7种传播行为,嵌套事务,平台事务管理器;
  5. 分布式事务: 刚性事务,2pc(两阶段提交),3pc(三阶段提交);tcc柔性事务,base理论,cap理论。

0. 何为事务

一组逻辑操作单元,使数据从一种状态变换为另一种状态。这句话有两个重点: 1. 一组,说明事务应该是多个操作, 2. 一种状态变换为另一种状态,说明单元具有整体一致性

1. 应用场景

  • 转账: 最直接的例子,双方要么都成功,要么都失败;
  • 删除用户及其附属信息: 要么整个删除成功,要么整个删除失败;
  • 操作日志: 操作记录必有日志,有日志必有操作记录,不能分离。

2. 事务管理DML语句

D(Data) M(Manipulation) L(Language)数据操纵语言,也就是insert,update,delete这三种语句。

3. 哪种存储引擎支持事务

InnoDB支持,MyISAM不支持。

4. 事务4大特性:ACID

  • 原子性(Atomicity,或称不可分割性):一个事务必须被视为一个不可分割的最小单元,整个事务中的所有操作要么全部提交成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作。

  • 一致性(Consistency):事务将数据库从一种一致性转换到另外一种一致性状态,在事务开始之前和事务结束之后数据库中数据的完整性没有被破坏。

  • 隔离性(Isolation,又称独立性):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

  • 持久性(Durability):一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,已经提交的修改数据也不会丢失。

5. 注意点

在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

6. 事务控制语句

  • BEGIN 或 START TRANSACTION, 显式地开启一个事务;

  • COMMIT 或 COMMIT WORK,提交事务。COMMIT会对数据库进行的所有修改成为永久性的;

  • ROLLBACK 或 ROLLBACK WORK,回滚事务。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

  • SAVEPOINT savepoint_name,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;

  • RELEASE SAVEPOINT savepoint_name, 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

  • ROLLBACK TO savepoint_name, 把事务回滚到标记点;

  • SET TRANSACTION, 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED(读未提交/RU)、READ COMMITTED(读已提交/RC)、REPEATABLE READ(可重复读/RR) 和 SERIALIZABLE(串行化/SZ)

  • SET AUTOCOMMIT=0, 设置Mysql禁止自动提交事务

  • SET AUTOCOMMIT=1, 设置Mysql开启自动提交事务

  • SAVEPOINT 是在数据库事务处理中实现“子事务”(subTransaction),也称为嵌套事务的方法。事务可以回滚到 savepoint 而不影响 savepoint 创建前的变化, 不需要放弃整个事务。ROLLBACK 回滚的用法可以设置保留点 SAVEPOINT,执行多条操作时,回滚到想要的那条语句之前。

7. 下篇介绍

  • 事务并发问题
  • 事务隔离级别
  • 事务实现原理
  • 只读事务介绍
事务
基础
mysql
  • 作者:管理员(联系作者)
  • 发表时间:2020-03-18 23:51
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 公众号转载:请在文末添加作者公众号二维码
  • 微信公众号

    评论

    留言