1.Spring事务的传播属性
PROPAGATION_REQUIRED 支持当前事务,如果当前没有事务,则新建一个事务。
PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,则以非事务方式执行。
PROPAGATION_MANDATORY 支持当前事务,如果当前没有事务,则抛出异常。
PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED 以非事务方式执行,如果当前存在事务,把当前事务挂起。
PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行,如果当前没有事务,则新建一个事务。
2.Spring事务的隔离级别
ISOLATION_DEFAULT 默认隔离级别,使用数据库默认的事务隔离级别。
ISOLATION_READ_UNCOMMITTED 最低的隔离级别,允许一个事务查看另一个事务未提交的数据。会产生脏读,不可重复读,幻读。
ISOLATION_READ_COMMITTED 保证一个事务修改的数据需要提交后才能被另一个事务读取,锁定正在读取的行。能够避免脏读。
ISOLATION_REPEATABLE_READ 锁定读取的所有行。能够避免脏都,不可重复读。
ISOLATION_SERIALIZABLE 最高的隔离级别,锁住表,事务被处理为顺序执行。能够避免脏读,不可重复读,幻读。
3.脏数据
脏读:一个事务正在访问数据,并且对数据进行了修改,而修改还没有提交到数据库。这时,另一个事务也访问这个数据,然后使用了未提交前的数据。
不可重复读:一个事务内多次读取同一数据。在事务还没结束时,另一个事务也访问同一数据。在第一个事务中的两次读数据之间,第二个事务修改数据,导致第一个事务读取的数据不一致。
幻读:一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,另一个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。