### 一、什么是事务?
一个事务一旦其中有一个操作出现错误,事物的操作将全部回滚。系统将事务中对数据库的所有的已完成的操作全部撤消,回滚到事务开始的状态。
一个事务中的所有操作作为一个单元,要么完全地执行,要么完全地不执行。
事务是为了确保数据的完整性和一致性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务,声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。
声明式事务有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于 @Transactional 注解的方式。
我们常用基于 @Transactional 注解的方式管理事务。
**事务ACID四种特性**
ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)的英文缩写。
(1)原子性(Atomicity)
事务最基本的操作单元,要么全部成功,要么全部失败,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。
(2)一致性(Consistency)
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。
(3)隔离性(Isolation)
指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。
(4)持久性(Durability)
指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。
------
### 二、Spring Boot @Transactional注解事务回滚不起作用
参考 [Spring Boot](https:/