ORACLE下的事务和触发器

1.事务

事务是数据库的一种机制,当执行一系列操作时,事务可以保证这一系列操作都能完成,在此期间如果出现问题,则这一系列操作导致的结果均回退到原始状态。这样就保证了数据的一致性,事务在数据库种是极其重要的。

1.1 事务的特点

事务的特点简单说就是ACID。原子性,组成事务处理的语句是一个整体,不能只执行其中的一部分;一致性,在事务执行前后,数据库是一致的;隔离性,一个事务处理对另一个事务处理的影响;持续性:事务处理的效果会被永久保存下来。一个事务只会有一个结果,要么都执行,要么都不执行。

1.2 事务的提交和回滚

Oracle种使用commit和roolback来控制事务的提交和回滚。这里有一个保存点的概念,意思是可以通过创建保存点的方式指定事务回退的“点”。如下实例:

-- 创建保存点1

savepoint a1;

-- 执行sql操作
update user set name='' where id = 1;

-- 创建保存点2
savepoint a2

-- 执行sql操作
delete user where id = 2;

-- 如果出问题了,回滚到保存点2

Roolback to a2;

-- 提交(提交之后是无法回滚的)
commit;

1.3事务提交前后的数据可见性

事务提交前,改变前的数据状态是可以恢复的,执行DML操作的用户可以通过SELECT 语句查询之前的修正,其他用户看不到当前用户所做的改变,直到当前用户结束事务,也就是提交事务。
事务提交后,数据的改变已经被保存到数据库中,改变前的数据已经丢失,所有用户可以看到结果,所有保存点被释放。一经提交,无法恢复。

2.触发器

触发器是一个与表相关联的、存储的PL/SQL程序,每当一个DML语句在表上发生时,oracle会自动执行触发器中的语句序列,触发器是在执行DML语句时,自动调用的。触发器可用于数据确认、实施复杂的安全性检查、跟踪表上的所有数据操作、数据的备份和同步等。

2.1 触发器的类型

触发器有两种类型:语句级触发器、行级触发器(FOR EACH ROW)

2.2 触发器的解释

触发器这个组件,我觉得可以称作为组件,光凭概念去理解可能会很抽象,通俗易懂的说触发器就相当于是一个监听器,当对表执行DML语句时,如果指定的对象上添加了触发器,则会执行触发器所定义的动作,我目前所认识的触发器指定定义到指定表上,接下来看几个例子理解一下。

2.3 触发器的应用

创建一个行级触发器,当更新数据表种记录时,将会执行打印“update table”的动作:

Create or replace trigger trigger1

Before update

On person for each row

Decclare

Begin

Dbms_output.put_line(“update table”);

End;

触发器中有:OLD和:NEW两个声明,意思是获取到制定操作之前对应行数据的旧值和新值,可以针对insert、update、delete操作进行修饰,不过需要注意的是,绑定到insert操作上的触发器中不能使用:OLD,绑定到delete操作上的触发器不能使用:NEW。可以思考一下为什么不能用。(insert之前有旧值么?)

好了,理论说了一大堆,下边写几个历史上用来做触发器入门的例子吧。

-- 在person表上添加行级触发器,用来监听插入之前的操作,禁止开头为A的名字添加到person表

Create or replace trigger t1

Before insert on person for each row

Begin

Dbms_output.put_line(‘hello’||:NEW.id||:NEW.name);

If :NEW.name like ‘A%’ then

Raise_APPLICATION_ERROR(-20000,’不允许写入以A开头的 名字’);

End if;

End;

-- 验证操作

Set serveroutput on;

Insert into person values(‘id’,’ABC’);  -- 禁止插入,提示错误信息

-- 限制修改的年龄大于之前的年龄

Create or replace trigger t2

Before update on user for each row

Begin

If :NEW.age < :OLD.age then

-- 提示错误信息

End if;

End;

-- 同时添加insert、update、delete三种类型操作对应的触发器

Crete or replace trigger t3

Before insert or update or delete on user

Declare

Begin

-- 操作

End;

查看创建了哪些触发器:

SELECT * FROM USER_TRIGGERS

11、oracle数据库下的事务和触发器相关推荐

  1. oracle表重命名 索引,CSS_在Oracle数据库中按用户名重建索引的方法,如果你管理的Oracle数据库下某 - phpStudy...

    在Oracle数据库中按用户名重建索引的方法 如果你管理的Oracle数据库下某些应用项目有大量的修改删除操作, 数据索引是需要周期性的重建的. 它不仅可以提高查询性能, 还能增加索引表空间空闲空间大 ...

  2. Oracle数据库下的DDL、DML、DQL、TCL、DCL

    首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1 ...

  3. 13、oracle数据库下的游标

    ORACLE下的游标操作 游标是sql的一个内存工作区,由系统或者用户以变量的形式定义.游标的作用是用于临时存储从数据库中提取的数据块.游标有静态游标.动态游标之分,静态游标又可分为隐式游标和显式游标 ...

  4. 12、oracle数据库下的存储过程和函数

    ORACLE下的存储过程和函数 存储过程和函数是一种操作块,用来流程化.整体化处理业务逻辑的数据库操作方式.我理解的是相当于java开发语言中方法的概念,存储过程和函数的区别在于函数可以有返回值,而过 ...

  5. 9、oracle数据库下的视图和同义词

    ORACLE下的视图和同义词 1.视图 视图就是一个查询的结果,可能包含一张表或者多张表的信息,创建视图其目的在于,便于查看表中的信息.视图只是在逻辑上存在. 1.1创建/修改视图 创建视图一定要有C ...

  6. 8、oracle数据库下的索引

    ORACLE下的索引 索引是oracle下的一类对象,主要用于提高查询的效率. 1.操作索引 1.1 创建.修改索引 -- 添加一般索引 create index i_test_tname on te ...

  7. 6、oracle数据库下查询操作

    ORACLE下查询操作 针对数据库操作最多的就是数据查询,这里分享一个我常用的方法,看到需求后,先确定查询范围,就是需要查询哪些表:之后确定查询条件:最后写出查询的字段. ORACLE中之前说过有两个 ...

  8. Oracle数据库学习之事务,去重,空值处理,基本操作符(五)

    --事务,保证数据的安全有效,事务主要对DML语言有效,commit,rollback(只能回滚未提交的事务),savepoint(保存点) update emp set EMPNO = 1234 w ...

  9. oracle 数据库的数据事务的相关概念

    1.事物的隔离级别:事物的隔离级别定义着事务的隔离程度. 首先搞清楚三个概念:脏读.不可重复读.幻读. 脏读:当一个事务读取另一个事务尚未提交的时候,产生脏读 不可重复读:在同一个事务中的同一个查询, ...

最新文章

  1. Grid SearchCV(网格搜索) 用法代码演示
  2. [Git] 写文章 史上最全文献检索、阅读及管理攻略
  3. 度量学习_使用Dropwizard度量标准监视和测量无功应用
  4. java Socket Tcp 浏览器和服务器(一)
  5. linux下oracle导出12705,llinux下Oracle数据库的单个表导出导入
  6. 长为N的数组,元素范围是0-N-1,其中只有一个数是重复的,找出这个重复元素...
  7. 更新k8s镜像版本的三种方式
  8. putty界面最友好的颜色配置参考
  9. 错误:java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
  10. 一个bootstrap.css的使用案例
  11. 在线图书销售系统顺序图_苏宁易购网上商城在线购物
  12. Greenplum外表gpfdist加载数据
  13. Android界面 Html5还是Native,说说他们的各自的优缺点。
  14. 【N32G457】基于RT-Thread和N32G457的可控电流源
  15. 常用贷款词汇英文名称
  16. ERR_ABORTED 404
  17. 什么软件质量/如何评价软件的质量
  18. 网店买书如何避免被骗?
  19. 建网站(为什么租服务器和购买域名)
  20. [感悟]做事有目标,效果会更好

热门文章

  1. sae 本地环境 mysql数据库_SAE本地环境与真实环境的差别
  2. 前台提交数据到php mysql,建立一个基础的MySQL数据库,使用PHP来抓取和处理数据,并抛出给前台...
  3. ajax option请求后无post请求_ThingJS:一种浏览器、服务器和技术的新组合方法——Ajax...
  4. [EDA]Quartus II 实验简答题
  5. poj2182 Lost Cows-暴力
  6. m个苹果放入n个盘子问题
  7. 计算机网络原理第一章习题3-24 3-25
  8. SQL(四) - 子查询和union以及limit分页
  9. 数据结构---关键路径
  10. 蓝桥杯 数字三角形 贪心+动态规划