事务特性:ACID
Atomicity:原子性,要么全部成功要么全部失败
Consistency:一致性,操作的数据及状态改变是一致的
Isolation:隔离性,提交事物前数据对其他事物不可见
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 。