zoukankan      html  css  js  c++  java
  • oracle 基础知识(五)--回滚(commit和rollback)

    一,commit

      01,commit干了啥

       commit 就是提交的意思.也就是当你把99%的东西都做好了,然后你执行最后一步的操作...再commit前的话你可能啪啪啪啪啪,敲了几百条sql DML或者DML语句. 然后你可能自己select 或许desc一下,看见了自己的成果,但是其他用户任然看不到.当你comiit执行一下后,其他用户才能看见.

      02. commit的发生了什么

        1)服务器为每个COMMIT产生一个SCN。使改变永久化;
        2)LGWR进程将日志缓冲区数据并带有SCN一起写到重做日志文件;
        3)服务器释放表级和行级锁;
        4)用户被提示COMMIT完成;
        5)服务器使事务已完成。

      03.实例

         A.B个连接进数据库服务器,数据内容都一致显示

    1 SQL> select * from t1;
    2 
    3 A       B
    4 ---------- ----------
    5 aaaaa       aaaaa
    6 12345       67890
    View Code

         A连接里面操作

    SQL> insert into t1 values('qqq','qqq');
    SQL> insert into t1 values('qqq','qq121');
    
    2 row created.

          B.连接查看会发现数据没有变化

          提交数据,commit

           ----------

           刚刚吃炸鸡(感谢霍哥的炸鸡 QaQ )

           吃的太开心数据忘记提交了, 

           ------------ 

     

      

      数据没了,这就是没有commit的后果 ,大家一定要记住

      重新来一遍

      

      commit

      提交完成后另外一个肯定可以查到了

    二, rollback

      01,rollback

        回退的意思,比如你用update更新表中一条记录,这时你查询这个表时,则发现表已经更新(注意这个指示你觉得更新了,再没有commit之前);再rollback后,你再查询表时,发现表还是更新之前的样子。等同于你再写word文档的时候,哪里错了,习惯来一个CRTL+Z 撤销.但是加入你保存了文档并且退出去了,重新打开,你就不能撤销操作了

      02,rollback 处理的顺序

        1)服务器进程不做任何的改变。
        2)服务器释放表级和行级锁。
        3) 服务器使事务已完成。

      03,实例

    SQL> insert into t1 values('qqq','qqq');  ---插入数据
    
    1 row created.
    
    SQL> select * from t1;   ----第一次查询
    
    A       B
    ---------- ----------
    aaaaa       aaaaa
    12345       67890
    qqq       qqq
    
    SQL> savepoint a     ---保存一个回滚点
      2  ;
    
    Savepoint created.
    
    SQL> insert into t1 values('qqq','qq121');---- 再次做插入 
    
    1 row created.
    
    SQL> savepoint b;    ----保存第二个回滚点
    
    Savepoint created.
    
    SQL> delete t1 where A = 'qqq';  ---- 删除 数据
    
    2 rows deleted.
    
    SQL> select * from t1;   ----查询的时候发现没有了
    
    A       B
    ---------- ----------
    aaaaa       aaaaa
    12345       67890
    
    SQL> rollback to B;   ---回滚操作
    
    Rollback complete.
    
    SQL> select * from t1;   ---再次查询,回滚成功
    
    A       B
    ---------- ----------
    aaaaa       aaaaa
    12345       67890
    qqq       qqq
    qqq       qq121    

    三,两者之间的事宜  

       01,两者只对insert、update、delete(DML数据操纵语句)操作有效

       02,先commit再rollback,则rollback相当于不起作用。

       03,若现delete再select再rollback,,则rollback会撤回delete操作。

       04,其他用户查询你的表示看到的是最后一次commit之后的表,而你看到的是最新操作的表。

  • 相关阅读:
    HDU 4472 Count DP题
    HDU 1878 欧拉回路 图论
    CSUST 1503 ZZ买衣服
    HDU 2085 核反应堆
    HDU 1029 Ignatius and the Princess IV
    UVa 11462 Age Sort
    UVa 11384
    UVa 11210
    LA 3401
    解决学一会儿累了的问题
  • 原文地址:https://www.cnblogs.com/kingle-study/p/10437967.html
Copyright © 2011-2022 走看看