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之后的表,而你看到的是最新操作的表。

  • 相关阅读:
    欧几里得算法及扩展欧几里得(含)
    RP
    P1734_最大约数和
    The 2017 ACM-ICPC Asia East Continent League Final记录
    【数据结构】bzoj1651专用牛棚
    【数据结构】bzoj1455罗马游戏
    【数据结构】bzoj1636/bzoj1699排队
    【数据结构】bzoj3747Kinoman
    【计算几何】奇特的门
    Topcoder SRM 608 div1 题解
  • 原文地址:https://www.cnblogs.com/kingle-study/p/10437967.html
Copyright © 2011-2022 走看看