代码改变世界

oracle数据库事务相关【weber出品必属精品】

2014-08-20 21:43  yaoweber  阅读(194)  评论(0编辑  收藏  举报
  1. 事务的概念:
    事务:一个事务由一组构成一个逻辑操作的DML语句组成

    事务有开始有结束,事务以DML语句开始,以Conmmit和Rollback结束。
    以下情况会使得事务结束:

    1. 执行COMMIT 或者 ROLLBACK 语句

    2. 执行DDL或者 DCL语句

    3. 用户退出

    4. 系统崩溃

  2.  一个事务可以包含下列语句:

    1. 对数据做出一致性修改的DML语句

    2. 一个 DDL 语句

    3. 一个 DCL语句

  3.   DDL与和DCL语句执行的过程:

    1. 首先发出COMMIT;

    2. 执行对数据字典的DML操作

    3. 如果成功,commit,如果失败,rollback

  4.  保证数据的一致性:没有提交的数据,其他的用户看不到

    在数据永久改变之前,检查数据的改变

    对逻辑相关的操作进行分组

  5.  控制事物:保存点(savepoint)
  6. SQL> select * from t;
     
    EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
    ----- ------ --------- ----- --------- ----- ----- ------
     7369 ALLEN  SALESMAN   7902 17-DEC-80  1600           20
        1 y                                  100
        2 w                                  100
     
    SQL> savepoint s1;
     
    Savepoint created.
     
    SQL> insert into t (empno,ename) values(3,'b');
     
    1 row created.
     
    SQL> savepoint s2;
     
    Savepoint created.
     
    SQL> delete t;
     
    4 rows deleted.
     
    SQL> select * from t;
     
    no rows selected
     
     
    SQL> rollback to savepoint s2;
     
    Rollback complete.
     
    SQL> select * from t;
     
    EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
    ----- ------ --------- ----- --------- ----- ----- ------
     7369 ALLEN  SALESMAN   7902 17-DEC-80  1600           20
        1 y                                  100
        2 w                                  100
        3 b                                  100
     
    SQL> rollback to savepoint s1;
     
    Rollback complete.
     
    SQL> select * from t;
     
    EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
    ----- ------ --------- ----- --------- ----- ----- ------
     7369 ALLEN  SALESMAN   7902 17-DEC-80  1600           20
        1 y                                  100
        2 w                                  100
     
    ----这里要注意了啊,因为rollback到了的s1这个保存点,也就不可以在rollback到s2这个保存点---因为s1中这个保存点没有记录到s2保存点的信息----
    SQL> rollback to savepoint s2;
    rollback to savepoint s2
    *
    ERROR at line 1:
    ORA-01086: savepoint 'S2' never established

     

  7.  
  8.