1. 事务四要素( ACID )
Ø Atomicity (原子性):工作单元不可分;要么执行所有数据修改,要么不执行任何数据修改。
Ø Consistency (一致性):事务完成后,必须使所有数据处于一致的状态。
Ø Isolation (隔离性):无法在事务之外看到中间状态的数据。
Ø Durability (持久性):事务完成之后,其作用将永久保留在系统中。
2. 并发
1) 并发的基本问题
Ø 丢失更新
Ø 不一致读
Ø 死锁
2) 隔离和只读
3) 锁类型
Ø 共享锁( S )
Ø 排它锁( X )
4) 乐观锁和悲观锁
Ø 乐观锁重在冲突检测,悲观锁重在避免冲突
Ø 乐观锁将比悲观锁拥有更好的并发能力
5) 隔离级别与不一致读错误
隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。
隔离级别 | 读脏数据 | 不可重复读 | 幻影读 |
Read Uncomitted | Yes | Yes | Yes |
Read Committed | No | Yes | Yes |
Repeatable Read | No | No | Yes |
Serializable | No | No | No |
3 . Oralce 事务
1)Oracle 常用锁类型
锁 | SQL |
None | select |
SS(Table-S&Row-S) :行级共享锁,其他对象只能查询这些数据行 | Select for update 、 Lock for update 、 Lock row share |
SX(Table-S&Row-X) :行级排它锁,在提交前不允许做 DML 操作 | Insert 、 Update 、 Delete 、 Lock row share |
S(Table-Share) :共享锁 | Create index |
X(Table-Exclusive) :排它锁 | Alter table 、 Drop able 、 Drop index 、 Truncate table |
2)Oralce 的隔离级别
ORACLE 提供了 SQL92 标准中的 read committed 和 serializable ,同时提供了非 SQL92 标准的 read-only 。
3. 分布式事务
1)JTA : Java Transaction API
2) 跨资源事务
3) 跨进程事务
4. 事务传播
Ø Required
Ø Support
Ø Mandatory
Ø Required new
Ø Not Support
Ø Never
5 . Spring 对事务的支持
Ø TransactionAttribute :定义事务属性,包括传播属性、隔离级别、超时时间、是否只读和异常回滚策略
Ø TransactionAttributeSource :定义了事务属性的获取接口,其实现包括通过 Annotation 获取事务属性 (AnnotationTransactionAttributeSource)
Ø PlatformTransactionManager :事务管理器接口,其实现了具体的事务策略,包括 JTA 、 Hibernate 、 DataSource 、 JDO 等实现
Ø TransactionInterceptor :事务拦截器,基于 AOP 的声明式事务
Ø TransactionTemplate :手工事务模板类