事务理解

         下午对事务仔细的回顾了一下,总结如下:

   事务的四大特性:ACID是原子性(atomicity)、一致性(consistency)、隔离(isolation)和持久性(durability)的缩写。
  
七个事务的传播行为

1,propagation_required

如果一个事务存在,则支持当前事务,如果不存在,则创建新的事务

2,propagation_supports

如果一个事务存在,则支持当前事务,如果不存在,则非事务的方法运行

3,propagation_mendatory

如果一个事务存在,则支持当前事务,如果存在,则抛出异常

4,propagation_requires_new

总是要开启一个新的事务,如果事务存在,将该事务挂起

5,propagation_not_supported

总是非事务方法运行,并挂起所有的事务

6,propagation_never

总是非事务方法运行,如果事务存在则抛出异常

7,propagation_nested

某一个事务存在,则运行在一个嵌套的事务中


五个事务隔级别分别为:lsolation的属性值

1,default

默认的事务隔离级别

2,read_uncommitted

读未提交,一个事务可以操作另外一个未提交的事务,不能避免脏读,不可重复读,幻读,隔离级别最低,并发性 能最高

3,read_committed

读已提交,一个事务不可以操作另外一个未提交的事务, 能防止脏读,不能避免不可重复读,幻读。

4,repeatable_read

能够避免脏读,不可重复读,不能避免幻读

5,serializable

隔离级别最高,消耗资源最低,代价最高,能够防止脏读, 不可重复读,幻读。


ps:配置事务的顺序

1.配置sessionFactory

2.配置事务管理器

3. 事务传播特性

4. 那些类那些方法使用事务




ORACLE数据库事务隔离级别

事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度。

两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:

1、幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。

2、不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。

3、脏读:事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据,然后T1执行回滚操作,取消刚才的修改,所以T2所读取的行就无效,也就是脏数据。

为了处理这些问题,SQL标准定义了以下几种事务隔离级别

READ UNCOMMITTED 幻想读、不可重复读和脏读都允许。

READ COMMITTED 允许幻想读、不可重复读,不允许脏读

REPEATABLE READ 允许幻想读,不允许不可重复读和脏读

SERIALIZABLE 幻想读、不可重复读和脏读都不允许

Oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。所以Oracle不支持脏读

SQL标准所定义的默认事务隔离级别是SERIALIZABLE,但是Oracle 默认使用的是READ COMMITTED

设置隔离级别使用 SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]

你可能感兴趣的:(隔离,传播)