`
zengshaotao
  • 浏览: 787813 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

事务级别

 
阅读更多
1.事务定义
           事务是保持数据的一致性,它由相关的DDL或者DML语句做为载体,这组语句执行的结果要么一起成功,要么一起失败。


     我们知道SQL92标准定义了数据库事务的四个特点:
•原子性 (Atomicity) :一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做
•一致性 (Consistency) :事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的
•隔离性 (Isolation):   多个事务并发的独立运行,而不能互相干扰,一个事务修改,新增,删除数据在根据当前事务的事务隔离级别基础上,其余事务能看到相应的结果(这里为什么这么说,下面我会给我具体的例子进行分析)
•持久性 (Durability) : 事务被提交后,数据会被永久保存          
    2. 事务控制命令
•COMMIT  提交事务
•SAVEPOINT 事务保存点 (savepoint a)
•ROLLBACK(TO) 回滚[回滚到定义的保存点] rollback to a
    3. 锁的概念
             锁是为了保证多个并发的事务在引用同一个资源时,对资源的保护,同时也防止事物间的相互破坏。
         
    4. Oracle中锁类型
•共享锁(表锁)共享锁有一下几种模式 
◦行共享模式  : 不运行其它用户插入,删除,更新操作,多个用户可以同时作用于该表,都能查询。语法如下:Lock table XX in share mode
◦行共享更新模式 : 允许多个用户同时锁定表中不同的行,能执行DML语句,除了那些被锁定的行。
•排他锁(行锁):  不允许其它用户对该表插入,删除,修改操作,只能查询,同时其它用户不能修改和锁定表
•死锁 : 所个事务对资源的相互等待,造成死锁。
    5. 事务隔离级别
             事务隔离级别定义了事务之间的隔离程度。SQL92标准中定义了4中隔离级别。
•未提交读 (READ UNCOMMITTED) 幻想读、不可重复读和脏读都允许。
•提交读   (READ COMMITTED)   允许幻想读、不可重复读,不允许脏读。
•重复读 (REPEATABLE READ)    允许幻想读,不允许不可重复读和脏读。
•序列化 (SERILIZABLE)             幻想读、不可重复读和脏读都不允许。
      通过一些现象,可以反映出设置事务隔离级别产生的效果:
•幻想读(幻读):  事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。
•脏读: 事务T1修改了一条数据,但是还未提交,事务T2恰好读取到了这条修改后了的数据,此时T1将事务回滚,这个时候T2读取到的数据就是脏数据,称为脏读。
•不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。
       6.Oracle的事务隔离级别
           ORACLE提供了SQL92标准中的read committed和serializable,同时提供了非SQL92标准的read-only。
•READ COMMITTED 
◦这是ORACLE缺省的事务隔离级别。
◦事务中的每一条语句都遵从语句级的读一致性。
◦保证不会脏读;但可能出现非重复读和幻像。
•SERIALIZABLE
◦ 简单地说,serializable就是使事务看起来象是一个接着一个地顺序地执行。
◦  仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改(也就是说其它事务在本事务开始后所做的修改,即使提交了,本事务也看不到)
◦保证不会出现非重复读和幻像。
◦ Serializable隔离级别提供了read-only事务所提供的读一致性(事务级的读一致性),同时又允许DML操作.
•   设置隔离级别
◦    设置一个事务的隔离级别 
■SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
■SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
■SET TRANSACTION READ ONLY;
◦    设置单个会话的隔离级别 
■ALTER SESSION SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
■ALTER SESSION SET TRANSACTION ISOLATION SERIALIZABLE;
    7.具体例子
• 
◦准备SQL
◦Sql代码 
create table A(
id int,
   name varchar2(50),
   primary key(id)
);◦演示一个T1插入,T2读取数据



T1提交事务后,T2可以看到数据



我们看到了事务隔离级别的效果,那么T1,T2事务执行时,oracle怎么设置这两个事务的锁的呢?我们来看一下这个操作





当T1提交后,T2修改表A成功




•演示2个事务,T1更新表A的数据,T2删除表2的数据



下面将T1提交,T2得到执行



◦T1提交后的情况



•演示事务的隔离级别
◦T1事务设置隔离级别为SERIALIZABLE,T2为默认级别





◦有的朋友可能会问,是不是T2未提交造成的,那么我们将T2提交后的结果如下





◦我们看看T3的查询结果




◦由上述结果我们可以知道,如果事务设定了序列化的隔离级别,那么在该事务期间,其它事务对该事物中引用的资源修改将不可见。

http://kingj.iteye.com/blog/1675011
  • 大小: 130.2 KB
  • 大小: 18.7 KB
  • 大小: 25.7 KB
  • 大小: 19.5 KB
  • 大小: 27 KB
  • 大小: 19.4 KB
  • 大小: 39.3 KB
  • 大小: 29.4 KB
  • 大小: 31.5 KB
  • 大小: 32.2 KB
分享到:
评论

相关推荐

    SQL中 各种事务级别 和 脏读 不可重复读 幻读问题代码示例

    该资源详细介绍了MySQL数据库中的事务隔离级别,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable),并讨论了这些级别如何影响脏读、不可重复读...

    事务传播特性&事务隔离级别

    事务传播特性&事务隔离级别 事务传播特性是指在 Java 中,事务的传播行为,即在多个事务之间如何交互和传播。Java 中有七种事务传播特性,分别是: 1. PROPAGATION_REQUIRED:如果存在一个事务,则支持当前事务。...

    MY SQL 事务隔离 查询:默认事务隔离级别

    查询:默认事务隔离级别 mysql> select @@tx_isolation;当前会话的默认事务隔离级别 mysql> select @@session.tx_isolation;当前会话的默认事务隔离级别 mysql> select @@global.tx_isolation;全局的事务隔离级别

    MySQL事务隔离级别

    MySQL事务隔离级别是数据库管理系统中一个非常重要的概念,它关系到数据的一致性和并发性能。在MySQL中,事务被用于确保数据库操作的原子性、一致性、隔离性和持久性(ACID特性)。事务隔离级别主要涉及四个方面:读...

    SPRING事务传播特性&事务隔离级别

    ### Spring 事务传播特性和事务隔离级别详解 #### 一、Spring 事务传播特性 在进行多层服务架构设计时,事务的管理尤其重要。为了确保数据的一致性,Spring 提供了一种灵活的方式来控制事务的传播行为。下面详细...

    MySQL的四种事务隔离级别

    MySQL数据库管理系统提供了四种事务隔离级别来处理事务并发中可能遇到的问题。事务并发问题通常包括脏读、不可重复读和幻读。 一、事务的基本要素(ACID) 事务具有四个基本要素,即原子性(Atomicity)、一致性...

    spring事务的传播特性和事务隔离级别

    ### Spring事务的传播特性和事务隔离级别 #### 一、Spring事务的传播特性(Propagation) 在Spring框架中,事务管理不仅提供了ACID属性的支持,还引入了事务的传播特性,这些特性决定了当一个方法调用另一个方法时,...

    数据库事务隔离级别

    介绍数据库事务的四种隔离级别,比较不同隔离级别的区别和影响

    spring常用数据库事务传播属性和事务隔离级别1

    Spring 框架提供了一套完善的事务管理机制,其中包含了多种事务传播属性和事务隔离级别。这些特性使得在处理数据库操作时,能够更好地控制事务的边界和行为,从而确保数据的一致性和完整性。 首先,我们来看一下...

    数据库事务和隔离级别

    数据库事务和隔离级别

    asp sql 事务处理

    2. 设置事务级别,通常使用`conn.BeginTrans`开始一个新的事务: ```vbscript conn.BeginTrans ``` 3. 执行SQL语句: ```vbscript conn.Execute "UPDATE Table SET Column = '新值' WHERE Condition" ``` 4....

    JDBC事务 JTA事务 传播特性 隔离级别

    事务是数据库操作的基本单元,确保数据的一致性和完整性。在Java编程中,处理事务主要涉及JDBC(Java Database Connectivity)和JTA(Java Transaction API)。理解这些概念对于开发可靠的、高性能的数据库应用至关...

    C#操作事务

    四、事务级别 在开始事务时,可以设置不同的隔离级别,如Read Uncommitted、Read Committed、Repeatable Read和Serializable,以控制事务间的隔离程度。不同的隔离级别会影响到并发性能和可能出现的问题,如脏读、不...

    SQL Server -事务和游标

    SQL Server提供了多种事务级别,如READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE,以满足不同场景的需求。合理选择事务级别可以平衡数据安全与性能。 接下来,我们讨论“游标”。游标允许用户...

    4种事务的隔离级别

    事务的隔离级别是数据库管理系统确保数据一致性的重要机制,它解决了并发事务执行时可能出现的问题,如读脏、不可重复读和幻读。在SQL92标准中,定义了四种事务隔离级别,分别是读未提交(Read Uncommitted)、读...

    SQLserver锁和事务隔离级别的比较与使用

    SQL Server的锁机制和事务隔离级别是数据库管理系统中确保数据一致性、避免并发问题的重要机制。在SQL Server中,锁主要用于控制多个用户同时访问同一数据时的并发操作,而事务隔离级别则是确定在事务中如何处理这些...

    SQLSERVER事务隔离级别的实验研究.pdf

    本文档详细探讨了SQL Server中不同事务隔离级别的实验研究,揭示了各隔离级别与锁管理之间的关系,并通过实验验证了不同隔离级别对数据访问和锁定行为的影响。 SQL Server事务隔离级别分为以下四种: 1. 未提交读...

    FIBPlus事务

    下面是不同事务级别间的交互示例: | 事务A | 事务B | 结果 | |---------------------------|--------------|--------------------| | isc_tpb_concurrency | isc_tpb_write | 可能冲突 | | isc_tpb_read_committed...

Global site tag (gtag.js) - Google Analytics