struts2+hibernate3+spring2读书笔记13(Hibernate的事务控制)
第14章 Hibernate事务控制
本章导读语
在日常生活中,常常会遇到一组依赖的操 作行为,例如在网上进行交易时,它分为多个步骤,当其中一个步骤发生异常时,视为个操作不成功,因此需要将状态变到最初始的状态,这种情况可称为事务。
一.数据库的ACID特征
1.Atomic(原子性):事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
2.Consistency(一致性):事务在完成时,必须使所有的数据都保持一致状态。
3. Isolation(隔离性):由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。
4.Durability(持久性):事务完成之后,它对于系统的影响是永久的,该修改即使出现致命的系统故障也将一直保持。
二.事务边界分为如下3种:
1.开始边界:开始事务。
2.正常结束边界:提交事务。
3.异常结束边界:回滚事务。
在Hibernate中,提供了这3种边界的操作方法,开始边界使用的是Session接口的beginTransaction()方法,正常结束边界使用的是Transaction提供的commint()方法,异常结束边界的是Transaction()接口提供的rollback()方法,在MySQL中,INNODB和BOB类型的表是支持事务的,而默认的表类型MyISAM并不支持事务,所以开发人员在创建表时需要执行表类型为INNODB或BOB,或通过:
Alter table 表的名称 type=INNODB;修改表的类型为支持事务的类型。
三.常见的事务并发问题
1.脏读:一个事务(事务甲)读到另一个事务(事务乙)未提交的更新数据,并且事务甲在数据上进行了更新操作,接关事务乙撤消了更新操作,此时事务甲操作的就是脏读。
2.虚读:一个事务(事务甲)读到另一个事务(事务乙)已提交的新插入的数据
3.不可重复读:一个事务(事务甲)读到另一个事务(事务乙)已提交的更新数据
4.第一类丢失更新:一个事务在撤销事务时,将其事物已提交的更新数据覆盖。
5.第二类丢失更新:一个事务覆盖另一个事务已提交的更新数据。
四.数据库的锁机制
1.数据库级锁:锁定整个数据库。
2.表级锁:锁定一个表。
3.区域级锁:锁定数据库的指定区域。
4.页面级锁:锁定数据库的特定页面。
5.键值级锁:锁定带有索引的一行数据。
6.行级锁:锁定表中的单行数据。
7.共享锁:用于读数据操作,允许其他事务同时读取锁定的资源,但不允许其他事务对锁定的资源进行更新。
8.独占锁:适用于更新数据的场合,不允许其他事务读取或修改其锁定的资源。
9.更新锁:在更新操作的初始化阶段用来锁定可能要修改的资源。