ACID
原子性( Atomic ):
- 事务包含的全部操作要么全部执行,要不全部不执行
一致性( Consistency ):
- 事务应确保数据库的状态,从一个一致的状态,转变为另一个一致的状态
- 例:转账 A+B = 2 不管怎么操作,结构必须是2
隔离性( Isolation ):
- 多个事务并发执行,一个事务的执行,不应该影响其他的执行
持久性( Durability ):
- 事务一旦提交,事务的修改应永久保存在数据库中,当系统或者介质发送故障时,确保已经提交事务的更新不丢失
隔离级别:TransactionDefinition接口中定义了五个表示隔离级别的常量,(下方大写)
- isolation_default: 默认隔离级别,mysql默认采用的:repeatable_read
- isolation_read_uncommitted(未提交读):最低的隔离级别,允许读取,允许读取尚未提交的的数据变更,可能会导致脏读、幻读或不可重复读。
- isolation_read_committed(提交读):允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
- isolation_repeatable_read(重复读):对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
- isolation_serializable(序列化):最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就说,该级别可以阻止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
事务传播
https://segmentfault.com/a/1190000013341344