oracle----事务处理

1、oracle:具有灾难性恢复的特点,因为有特有的事务控制机制。
数据库命令:
  DDL:数据定义语言(create ,alter,drop,truncate)
  DML:数据操纵语言(insert,update,delete,select)
  TCL:事物控制语言(commit,rollback,savepoint)
  DCL:数据控制语言(grant to,revoke from)


  |---事务(DML中的增删改自动启动事务机制)
      事物用于保证数据的一致性,他由一组相关的dml语句组成,该组的dml语句要么全部成功 ,要么全部失败。
  |---事物和锁
      当执行事务操作dml语句时oracle会自动在作用的表上加锁,防止其他用户在修改表的结构。
  |---提交事物
      当执行使用commit语句提交事务,当执行了commit语句之后,会确认事务的变化,结束事物,删除保存点,释放锁,当使用commit语句结束事务之后,其他会话将可以查看到事务变化的新数据
  |---回退事物
     保存点:保存点是事务的一点,用于取消部分事务,当结束事务时,会自动删除该事务所定义的所有保存点。


      保存点的理解:
        (1)基本语法:
             savepoint 保存点名称
        (2)在一个事物中可以保存个保存点
        (3)可以使用rollback to 保存点
        (4) 一旦回退了,就不能在再次回退
        (5)设置保存点,是有资源开销
        (6)一旦提交了事物,,则不能回退到任何保存点


      ---(1)事物特性
              |--- 原子性:一个事务的所有操作要么都做,要么都不做,不可分割
              |---一致性:事务开启之前和事物开启之后一定保持平衡状态
              |---隔离性:在一个会话里面读取不到另一个会话未提交的数据
              |---永久性:事务已经提交永不回退
      ---让事务生效(解锁)
             (1)执行commit;
             (2)关闭执行窗口
            (3)执行DDL语句
      ---让事务回滚与某一点
             savePoint;
             
      ---让事务回滚
             rollback;
             rollback cici;




 2、事务隔离级别
    概念:隔离级别定义了事务与事务之间的隔离程度
    ANS/ISO SQL92标准定义了一些数据库操作的隔离级别
   ?   


            隔离级别             脏读      不可重复读      幻读
   读未提交(read uncommit)      Y             Y            Y
    读已提交(read commit)       N             Y            Y
    可重复读(repeatable)        N             N            Y
    可串行化(Serializable)      N             N            N


   脏读:当一个事务读取另一个事务未提交的修改时,产生脏读,在oracle,没有脏读。
  不可重复读:在同一个事务中的同一个查询,如果因为别的事物修改或者删除,造成本事务查询的结果不一致,这种现象称为不可重复读。
   幻读:在同一个事务中的同一个查询,如果因为对事务的添加,造成本事务的查询结果不一致,这种现象称为幻读


3、oracle的事务隔离设置
   (1)设置一个事务的隔离级别
    SET TRANCACTIONSOLATIONLEVEL READ COMMITTED
    SET TRANSACTIONSOLATIONLEVEL SERIALIZABLE
    SET TRANSACTIONREAD ONLY;
   


    (2)在oracle中事务隔离级别
          |--- read comminted
           ---这是oracle中默认的事务隔离级别,保证不会出现脏读,但可能出现不可重复读和幻读
          |---serializable
            可以保证不出现脏读,不可重复读和幻读,但可以进行dml操o作
          |---read only
            可以保证不出现脏读,不可重复读和幻读,不可以进行dml操作


 4、在java程序中设置事务隔离级别
   
      connnection.setTransactionIsolation();








     ---锁机制
        按照所得类型:
            ---加锁类型:表级锁(表进入缓存区),行级所(指定行数进入缓存区)
            ---按照加锁的时机:显示锁(手动),隐式锁(自动)
            ---按照分类的力度:共享锁,排它锁(独占锁)
         
          共享锁:如果一个会话对该资源加了共享锁,另一个会话也可以对加共享锁
          排他锁:如果一个会话对该资源加了排他锁,另一个会话禁止对该资源加任何锁


          insert ,update ,delete自动添加隐式的排他锁
          
          ---手动加锁(加表级锁)
            语法:
             lock table 表名 in share/exclusive mode;
 
     ---死锁:为了保护正在修改的数据
        造成原因:竞争资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值