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

原文地址:https://www.cnblogs.com/kingle-study/p/10437967.html