spring事务: 什么是事务: 事务逻辑上的一组操做,组成这组操做的各个逻辑单元,要么一块儿成功,要么一块儿失败.spring
事务特性(4种):sql
原子性 (atomicity):强调事务的不可分割.数据库
一致性 (consistency):事务的执行的先后数据的完整性保持一致.安全
隔离性 (isolation):一个事务执行的过程当中,不该该受到其余事务的干扰atom
持久性(durability) :事务一旦结束,数据就持久到数据库 若是不考虑隔离性引起安全性问题: 脏读 :一个事务读到了另外一个事务的未提交的数据事务
不可重复读 :一个事务读到了另外一个事务已经提交的 update 的数据致使屡次查询结果不一致.ci
虚幻读 :一个事务读到了另外一个事务已经提交的 insert 的数据致使屡次查询结果不一致. 解决读问题:it
设置事务隔离级别(5种)io
DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.table
未提交读(read uncommited) :脏读,不可重复读,虚读都有可能发生
已提交读 (read commited):避免脏读。可是不可重复读和虚读有可能发生
可重复读 (repeatable read) :避免脏读和不可重复读.可是虚读有可能发生.
串行化的 (serializable) :避免以上全部读问题.
Mysql 默认:可重复读 Oracle 默认:读已提交 read uncommited:是最低的事务隔离级别,它容许另一个事务能够看到这个事务未提交的数据。
read commited:保证一个事物提交后才能被另一个事务读取。另一个事务不能读取该事物未提交的数据。
repeatable read:这种事务隔离级别能够防止脏读,不可重复读。可是可能会出现幻象读。它除了保证一个事务不能被另一个事务读取未提交的数据以外还避免了如下状况产生(不可重复读)。
serializable:这是花费最高代价但最可靠的事务隔离级别。
事务被处理为顺序执行。除了防止脏读,不可重复读以外,还避免了幻象读(避免三种)。
事务的传播行为 PROPAGION_XXX :事务的传播行为 * 保证同一个事务中
PROPAGATION_REQUIRED 支持当前事务,若是不存在 就新建一个(默认)
PROPAGATION_SUPPORTS 支持当前事务,若是不存在,就不使用事务
PROPAGATION_MANDATORY 支持当前事务,若是不存在,抛出异常 * 保证没有在同一个事务中
PROPAGATION_REQUIRES_NEW 若是有事务存在,挂起当前事务,建立一个新的事务
PROPAGATION_NOT_SUPPORTED 以非事务方式运行,若是有事务存在,挂起当前事务
PROPAGATION_NEVER 以非事务方式运行,若是有事务存在,抛出异常
PROPAGATION_NESTED 若是当前事务存在,则嵌套事务执行