事务特性:ACID



  1. Atomicity:原子性,要么全部成功要么全部失败
  2. Consistency:一致性,操作的数据及状态改变是一致的
  3. Isolation:隔离性,提交事物前数据对其他事物不可见
  4. Durability:持久性,事物对数据的修改永久保存


事务隔离级别:

基础设置


​查看Mysql数据库隔离级别: ​

​show global variables like '%isolation%'; ​

​Mysql全局隔离级别: ​

​未提交读: SET global TRANSACTION ISOLATION LEVEL read uncommitted; ​

​提交读: SET global TRANSACTION ISOLATION LEVEL read committed; ​

​可重复读: SET global TRANSACTION ISOLATION LEVEL repeatable read; ​

​串行化: SET global TRANSACTION ISOLATION LEVEL serializable;​



read uncommitted:未提交读

read uncommitted:未提交读,事物未提交对其他事务数据可见 【脏读】

read committed:提交读

read committed:提交读,A事务执行更新;B事务查询;A事务又执行更新;
B事务再次查询时,前后两次数据不一致 【不可重复读】

repeatable read:可重复读

read committed:可重复读,在一个事务中多次读取同样的数据结果是一样的,即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。 【幻读问题】

serializable:串行化

serializable:串行化,最高隔离级别,强制事物解决所有问题,写的时候不能读 【性能低】


Spring事物隔离级别


枚举:Isolation
DEFAULT(-1),
READ_UNCOMMITTED(1),
READ_COMMITTED(2),
REPEATABLE_READ(4),
SERIALIZABLE(8);
基本上和数据库隔离级别一一对应,DEFAULT :这是默认值,表示使用底层数据库的隔离级别。


Spring事物传播属性


所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。枚举:Propagation
REQUIRED(0),
如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 
SUPPORTS(1),
如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。 
MANDATORY(2),
如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。 
REQUIRES_NEW(3),
创建一个新的事务,如果当前存在事务,则把当前事务挂起。 
NOT_SUPPORTED(4),
以非事务方式运行,如果当前存在事务,则把当前事务挂起。 
NEVER(5),
以非事务方式运行,如果当前存在事务,则抛出异常。 
NESTED(6);
如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 REQUIRED 。