`
不打伞的蘑菇
  • 浏览: 15395 次
社区版块
存档分类
最新评论

rollback还有谁被坑过??

阅读更多

    今天被自己神坑了,本来是编写一个触发器,题目是:当删除dept表中部门的时候删除emp表中属于该部门的所有员工。
    但是我又不能真的删除表中的数据,就用设置回滚点的方法,整个过程十分谨慎,就怕稍不留神表中数据就没了,结果千防万防,还是……
    以下是我整个代码过程:

savepoint a;
(Savepoint created)

          --创建a点成功

create or replace trigger tri_delete_deptno
after delete
on dept
for each row
begin
delete emp where deptno=:old.deptno;
end;
(Trigger created)

      --创建触发器成功

delete dept where deptno=20;
(1 row deleted)
select * from dept;
select * from emp;

      --删除dept表中的数据成功,emp中的数据也成功被触发器删除。
          上面操作很顺利,于是很开心的回滚了。

rollback to a;
(ORA-01086: 从未创建保存点 'A')

      。。。。。。。
      天雷滚滚啊!不管怎么操作就是没保存啊!!顿时心里各种心凉……

      然后上网仔细各种搜索。梳理脉络,给大家解释一下这个回滚点。

     这里呢,有一个事务的概念。
     事务是用来确保数据库数据的一致性,它由一组相关的DML语句组成。该组DML语句要么全部成功提交,要么全部取消。
      数据库事务主要由INSERT,UPDATE,DELETE和SELECT...FOR UPDATE语句组成。当执行commit或rollback语句时,当前事务结束。
      使用COMMIT可以来提交事务。当执行了COMMIT后,oracle会进行确认事务变化,结束事务、删除保存点、释放锁等一系列操作。


       当然,我中间的确没有用commit,但是和我一样的菜鸟的话呢就注意以下几点了:
       1.注意当使用CREATE、ALTER、DROP、TRUNCATE等DDL语句时,oracle会自动提交事务。
       2.注意当使用GRANT、REVOKE等DCL语句时,oracle会自动提交事务。
       3.注意当使用EXIT正常退出SQL*PLUS时,oracle会自动提交事务。

 

        呵呵,所以我其实就犯了第一条错误。用create创建了一个触发器。所以在这之前的savepoint a就被删除掉了。然后提示说从未创建保存点 'A'。

       总而言之,在使用savepoint和rollback之间只能使用DML语句,而不能使用DDL语句,因为DDL是会自动提交的,在这之前的savepoint全部都会被删除掉。
       所以这里也要分清楚哪些是DDL哪些是DCL,在oracle里DML是可以rollback的,而DDL是不可以的。
       DML(Data Manipulation Language)数据操纵语言:
       适用范围:对数据库中的数据进行一些简单操作,如insert,delete,update,select等.

       DDL(Data Definition Language)数据定义语言:
       适用范围:对数据库中的某些对象(例如,database,table)进行管理,如Create,Alter和Drop.

       区别:
       1.DML操作是可以手动控制事务的开启、提交和回滚的。
       2.DDL操作是隐性提交的,不能rollback!

       好了,解决完毕,吐槽完毕,我要去回复我的dept表和emp表中被我删除的数据去了。 呜呜。

   

 

 

 

 

 

1
0
分享到:
评论
2 楼 不打伞的蘑菇 2014-10-25  
百合不是茶 写道
触发器里面不能使用事物控制,

我有看到一些人在触发器里面使用rollback操作,但我不是种情况,我是在创建触发器前创建保存点在触发器后回滚到保存点就不行。其实如果我先创建了触发器,然后再创建保存点,删除表数据,fire触发器,然后再rollback保存点。这样是可以的,表已经被删除的数据就可以回滚。
1 楼 百合不是茶 2014-10-25  
触发器里面不能使用事物控制,

相关推荐

    Win系统多点还原软件(RRx)RollBack Rx Pro V10.7

    RollBack Rx Pro是一款高效且强大的Windows系统多点还原软件,主要功能是为用户提供方便快捷的系统状态恢复解决方案。它能够创建系统快照,以便在系统出现故障或受到病毒攻击时,用户可以迅速将系统恢复到之前的正常...

    RollBack Rx PRO v11.1 正式永久使用无限制

    RollBack Rx v11.1 正式永久使用无限制,内包括正式版本SN(注册码) 非破解版本。

    雨过天晴RollBack 中英文版

    "雨过天晴RollBack 中英文版"是一个专注于数据保护和系统恢复的软件套装,包含了RollBack RX 10.2以及雨过天晴专业版两个主要组件。这两个工具都是为了帮助用户在遇到系统问题或者意外数据损失时,能够快速有效地...

    Ansible-rollback.zip

    Ansible-rollback.zip,在capistrano styleansistrano中负责回滚脚本应用程序(如php、python、ruby等),ansible是一个简单而强大的自动化引擎。它用于帮助配置管理、应用程序部署和任务自动化。

    RollBack Rx 10.3 破解版 Win8.1

    RollBack Rx 10.3 破解版 最好的还原软件,支持Win8.1系统,安装即已注册。

    Rollback Rx 9.0 注册工具

    注册机 雨过天晴海外版

    RollBack Rx强大系统备份还原工具 V10.3中文免费版.zip

    RollBack Rx是一款功能强大的优秀系统恢复还原软件,是全面的Windows系统还原解决方案,程序可以帮助用户和IT管理员轻松地在几秒钟内恢复他们的个人电脑到任何以前的状态。 系统出错或遭受病毒攻击之后,即使你清理...

    Win系统多点还原软件(RRx)RollBack Rx Pro V10.7带序列号版

    Win系统多点还原软件(RRx)RollBack Rx Pro V10.7带序列号版,可以对系统进行快照,多点记录,随时还原到记录点,快速还原

    雨过天晴注册机(Rollback Rx 9.0 注册工具)

    雨过天晴注册机(Rollback Rx 9.0 注册工具) 1.安装雨过天晴电脑保护系统专业版 V1.0.11.2.20100128,重启完成DOS下安装. 2.断开网络,注册机算出注册码. (机器码无法复制见这里X:\Program Files\Yuguo\netmsg.txt...

    RollBack.Rx.Pro.11.1 (crack)RollBack.Rx.Pro.11.1 (crack)RollBack

    RollBack.Rx.Pro.11.1 (crack)RollBack.Rx.Pro.11.1 (crack)RollBack.Rx.Pro.11.1 (crack)

    RollBack Rx V10.3 汉化 破解版

    强大电脑系统恢复还原软件(RollBack Rx)是一款功能强大的优秀系统恢复还原软件,是全面的Windows系统还原解决方案,程序可以帮助用户和IT管理员轻松地在几秒钟内恢复他们的个人电脑到任何以前的状态。 系统出错或...

    Rollback-homeRollback-homeRollback-home

    Rollback_homeRollback_homeRollback_home

    git-rollback:轻松回滚提交

    git-rollback 轻松回滚最后几次提交。安装$ gem install git-rollback用法$ git rollback贡献分叉( ) 创建功能分支( git checkout -b my-new-feature ) 提交更改( git commit -am 'Add some feature' ) 推送到...

    emberjs-rollback-extended:EmberData关系回滚

    emberjs-rollback-extended EmberJS Rollback Extended mixin最初是由amkirwan在提供的rollback-relationships.js启发的。 原始的rollback-relationship.js缺少一些功能,以及与我的应用程序集成的一些问题。 我决定...

    1394B相机ROLLBACK 文件.

    1394B相机在WINXP SP2 中的ROLLBACK(回滚) 方法,PDF文档.。,供全球各大品牌工业相机,MATROX采集卡,欢迎垂询13823365382

    1394B SP2回滚 RollBack文件

    标题 "1394B SP2回滚 RollBack文件" 指的是针对1394B(FireWire 800)接口的驱动程序,尤其是Service Pack 2(SP2)或Service Pack 3(SP3)更新的回滚操作。在Windows操作系统中,Service Pack是一种重要的更新集合...

    SQL事务用法begin tran,commit tran和rollback tran的用法

    当你执行 `ROLLBACK`,所有在 `BEGIN TRAN` 之后的更改都将被取消,就像它们从未发生过一样。 在提供的代码示例中,`TEST_PROC` 存储过程展示了如何在事务中执行数据库操作。存储过程首先使用 `BEGIN TRY` 和 `END ...

    RollBack.Rx.Pro.LanguageRollBack.Rx.Pro.LanguageRollBack.Rx.Pro

    RollBack.Rx.Pro是一款强大的系统还原工具,专为IT专业人士和普通用户设计,提供全面的系统保护和恢复功能。这款软件的核心理念在于“时间旅行”,它允许用户在系统出现故障或者受到恶意软件攻击时,轻松地将计算机...

    深入解析oracle的回滚段

    Oracle数据库中的回滚段(Rollback Segments)是存储事务历史的重要组件,它们记录了数据修改前的状态,以确保数据的完整性和一致性。在深入理解回滚段之前,我们需要先明确其基本概念和作用。 回滚段的主要功能...

Global site tag (gtag.js) - Google Analytics