JDBC 相关知识(四)

lgl669 2009-06-15
四、JDBC中的事务
Transaction:事物,一组相关的操作组合为一个整体,要么同时成功,要么同时失败。
ACID四大属性:autimicity:原子性;consistensy:一致性;isolation:隔离性;durability:持久性。
事务的提交方式分为:
自动式:jdbc新建连接默认使用此方式;
手动式:Connection.setAutoCommit(false),Connection.commit(),Connection.rollback()
dirty read(脏读):一个事务读取了其他事务未提交的数据。
repeatable read(不可重复读):在同一事务内多次读取同一数据的内容不一致。关注的是内容;
31

J2EE @ zxw
phantom read(幻影读/虚读):在同一事务中多次读取数据库记录的个数不一致。关注的是个数;
------------------------------------------------------------------------------------------------------------------------
为防止以上问题的出现,在JDBC中提供了五种隔离级别:
下面的常量在java.sql.Connection中:
0:TRANSACTION_NONE                不支持事务
1:TRANSACTION_READ_UNCOMMITTED   可以读取其他事务未提交的数据,可能产生脏读,
                                         不可重复读,幻影读的问题;
2:TRANSACTION_READ_COMMITTED     只能读取别的事务提交了的数据,解决脏读问题,
          但仍能产生不可重复读和幻影读问题
4:TRANSACTION_REPEATABLE_READ   可以解决脏读,不可重复读问题,但仍可能产生幻影读的问题
8:TRANSACTION_SERIALIABLE        解决了脏读,不可重复读,幻影读的问题
级别设置越高,消耗资源就越高;
------------------------------------------------------------------------------------------------------------------------
脏读:B事务读到了A事务没有提交的数据
时间 A事务 B事务
-----------------
t1 启动
t2 启动
t3 update
t4 select
t5 rollback
t6 结束
不可重复读:B事务两次查询同一条记录的内容不一样
时间 A事务 B事务
-----------------
t1 启动
t2 启动
t3 select
t4 update
t5 commit
t6 结束
幻读:B事务做同一条记录的查询,但结果数量不同
时间 A事务 B事务
-----------------
32

J2EE @ zxw
t1 启动
t2 启动
t3 select
t4 insert
t5 commit
t6 select
t7 commit
------------------------------------------------------------------------------------------------------------------------
设置隔离级别的方法:Connection.setTransactionIsolation(隔离级别对应的常量)。
                   read uncommited      read commited     repeatable      serializable
dirty read             n                            y                   y        y
repeatable read       n                   n                     y                   y
phandom read        n                        n                     n                   y
oracle 默认的隔离级别是:read commited.
oracle只支持标准的隔离级别中的两种:read commited和serializable.
Global site tag (gtag.js) - Google Analytics