数据库事务四大特性 ACID
- Atomicity 原子性:事务所包含的操作是全部成功,或者全部失败回滚。
- Consistency 一致性:事务前后数据从一个一致性状态变到另一个一致性状态。
- Isolation 隔离性:事务和事务之间要隔离
- Durability 持久性:事务提交之后,要保证数据不会因为断电等问题导致改变。
事务不进行隔离会产生的问题:
-
脏读。 一个事务读取到另外一个还未提交的事务的数据
-
不可重复读 一个事务内多次读取受到另外一个事务已经提交的数据。一个事务内多次读取一个数据不一致。因为另外一个事务提交导致数据变化。
-
一个事务内读到另外事务插入的数据 读取表的行数,受到另外一个事务影响!!
数据库隔离级别:
- read uncommitted 读未提交 可以读到未提交的事务数据
- read committed 读已提交 解决脏读问题 可以读到已提交的事务数据
- repeatable read 可重复读
解决不可重复读问题 mysql默认,InnoDB通过MVCC多版本并发控制解决幻读问题 - serializable 可串行话
解决幻读问题 强制事务排序执行
spring传播机制6个
-
requeried 支持当前事务,如果当前没有事务,则新建事务。
-
supports 支持当前事务,如果当前没有事务,则不新建事务。
-
mandatory 支持当前事务,如果当前没有事务,则抛出异常。
-
requeried_new 挂起当前事务,以新事务运行
-
not_support 挂起事务,以非事务运行
-
never 如果有事务则抛出异常
-
nested 如果存在事务,新起事务作为子事务。上面事务完成才能提交。如果不存在事务,则新起一个事务,