1、事务的基本特性:
原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性:一致性指事务前后数据的完整性必须保持一致。
隔离性:隔离性指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离。
持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响。
2、不考虑隔离性,会引发安全问题:
脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。
幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。
3、事务的隔离级别(Isolation)(org.springframework.transaction.annotation.Isolation)
MySQL默认采用REPEATABLE_READ隔离级别。
4、事务的传播行为(Propagation)(org.springframework.transaction.annotation.Propagation)
1.一个事务的方法A,一个标记事务传播属性为Required的方法B,B如果在方法A内,则方法B的事务只能用作回滚并且跟方法A是同一个事务
2.标记事务传播属性为RequiresNew的方法B,B如果在方法A内,则方法B的事务完全独立于方法A的事务,方法B的事务具有提交以及回滚性,即使方法A之后有回滚都不 影响方法B的事务
3.标记事务传播属性为Nested的方法B,B如果在方法A内,则方法B的事务则具有多个保存点的回滚,但这不影响A的事务的进行,这个设置通常映射到JDBC保存点,所以 只在jdbc的事务中有效。
关于事务的传播行为,详情见http://blog.csdn.net/it_man/article/details/5074371
5、spring的事务管理高层抽象主要包括3个接口
(1)、PlatformTransactionManager 事务管理器
(2)、TransactionDefinition 事务定义信息(隔离级别,传播行为,超时,只读)
(3)、TransactionStatus 事务具体运行状态