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