11、oracle数据库下的事务和触发器

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软发布自己定制的 Linux 内核和发行版,面向物联网

微软首次发布了自己的定制 Linux 内核和发行版。在旧金山举行的新闻发布会上&#xff0c;微软宣布了针对物联网设备的解决方案 Azure Sphere。Azure Sphere 包含三个组件。其中之一是微软设计的 Sphere MCU&#xff0c;将免费提供给厂商&#xff0c;联发科将在今年晚些时候推出…

P3804-[模板]后缀自动机【SAM】

正题 题目链接:https://www.luogu.com.cn/problem/P3804 题目大意 长度为nnn的串&#xff0c;求一个出现次数不小于2的子串使得子串长度乘上出现次数最大。 解题思路 构建SAMSAMSAM的时候统计一下每个子串出现多少次即可。 codecodecode #include<cstdio> #include&l…

MEDIATR 一个低调的中介者类库

微软官方的开源项目eShopOnContainers中&#xff0c;用到了一个实现中介者模式的类库&#xff1a;MediatR。这个类库的作者叫Jimmy Bogard&#xff0c;在其gtihub主页上可以看到&#xff0c;注明的对象映射组件AutoMapper 就是他写的。其博客上的自我介绍是这么写的&#xff1a…

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

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

Codeforces Gym 101173 CERC 16 D BZOJ 4790 Dancing Disks

Codeforces Gym 101173 CERC 16 D & BZOJ 4790 Dancing Disks 强烈安利这道构造题目&#xff0c;非常有意思。 这里用到的思想是归并排序&#xff01; 多路归并排序&#xff01; 我们这样想&#xff0c;假设6*6的网格中除了最后一个网格外&#xff0c;其他的凡是有元素…

P5496-[模板]回文自动机【PAM】

正题 题目链接:https://www.luogu.com.cn/problem/P5496 题目大意 长度为nnn的字符串&#xff0c;求每个字符串作为结尾有多少个回文串。 解题思路 PAMPAMPAM。 下面是个人对PAMPAMPAM的一些理解(不是讲解)&#xff1a; 每个节点表示一个回文串&#xff0c;就是根到其的路径…

ApacheSkyWalking APM 生态衍生多语言监控, 支持 .NET Core

Apache SkyWalking .NET core 探针发布&#xff01;GitHub: https://github.com/apache/incubator-skywalking 码云Gitee: https://gitee.com/OpenSkywalking/sky-walkingApache SkyWalking在4月初&#xff0c;发布了加入Apache孵化器后的第一个版本&#xff1a;5.0.0-alpha。…

13、oracle数据库下的游标

ORACLE下的游标操作 游标是sql的一个内存工作区&#xff0c;由系统或者用户以变量的形式定义。游标的作用是用于临时存储从数据库中提取的数据块。游标有静态游标、动态游标之分&#xff0c;静态游标又可分为隐式游标和显式游标。静态游标是在编译时期就决定了结果集的&#x…

背包系列

庆功会&#xff08;ssl 2289&#xff09; Description 为了庆贺班级在校运动会上取得第一名的成绩&#xff0c;班主任决定开一场庆功会&#xff0c;为此拔款购买奖品奖励运动员&#xff0c;期望拔款金额能购买最大价值的奖品&#xff0c;可以补充他们的精力和体力。 Input …

使用TFS CI/CD 完成 VSTS 插件自动化部署和发布

Visual Studio Team Service 经过了13年的版本演进和5年的在线运营&#xff0c;现在已经是最成熟的商用DevOps工具链&#xff0c;Marketplace作为VSTS为全球开发者提供各种类型的插件市场&#xff0c;为Visual Studio, Visual Studio Code和Visual Studio Team Service本身提供…

P4248-[AHOI2013]差异【SAM or SA】

正题 题目链接:https://www.luogu.com.cn/problem/P4248 题目大意 TiT_iTi​表示后缀i∼ni\sim ni∼n 一个字符串求 ∑i1n∑jinlen(Ti)len(Tj)−2∗lcp(Ti,Tj)\sum_{i1}^n\sum_{ji}^nlen(T_i)len(T_j)-2*lcp(T_i,T_j)i1∑n​ji∑n​len(Ti​)len(Tj​)−2∗lcp(Ti​,Tj​) 解题…

14、ORACLE下的基本SQL操作

ORACLE下的基本SQL操作 1.获取表字段 select * from user_tab_columns where Table_Name用户表 order by column_name2.获取表注释 select * from user_tab_comments where Table_Name用户表 order by Table_Name3.获取字段注释 select * from user_col_comments where Table_…

暗黑破坏神(ssl 2295)

暗黑破坏神&#xff08;ssl 2295&#xff09; Description 无聊中的小x玩起了Diablo I... 游戏的主人公有n个魔法 每个魔法分为若干个等级&#xff0c;第i个魔法有p[i]个等级(不包括0) 每个魔法的每个等级都有一个效果值&#xff0c;一个j级的i种魔法的效果值为w[i][j] 魔法升…

用C# (.NET Core) 实现迭代器设计模式

本文的概念来自深入浅出设计模式一书项目需求有两个饭店合并了, 它们各自有自己的菜单. 饭店合并之后要保留这两份菜单.这两个菜单是这样的:菜单项MenuItem的代码是这样的:最初我们是这样设计的, 这是第一份菜单:这是第2份菜单:同时有两个菜单存在的问题问题就是多个菜单把事情…

P4287-[SHOI2011]双倍回文【PAM】

正题 题目链接:https://www.luogu.com.cn/problem/P4287 题目大意 长度为nnn的字符串。定义wRw^RwR表示字符串www的翻转。 一个双倍回文可以表示为wwRwwRww^Rww^RwwRwwR且这是个回文串。 求最长的子串是双倍回文。 解题思路 我们在构建PAMPAMPAM的时候维护一个halfhalfhal…

2020-09-18

1.处理调用子组件方法时&#xff0c;报错undefined问题 2.var 、const 、let区别 3. curl -X GET --header "Accept: */*" "访问地址" 4.mysql中的日期格式化 5. ant-design-vue-jeecg

低价购买(洛谷 1108)

低价购买&#xff08;洛谷 1108&#xff09; 题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则。要想被认为是伟大的投资者&#xff0c;你必须遵循以下的问题建议:“低价购买&#xff1b;再低价购买”。每次你购买一支股票,你必须用低于你上次购买它的价格购…

.NET Core/.NET之Stream简介

之前写了一篇C#装饰模式的文章用.NET Core实现装饰模式和.NET Core的Stream简介 提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容).NET Core/.NET的Streams首先需要知道, System.IO命名空间是低级I/O功能的大本营.Stream的结构.NET Core里面的Stream主…

P4762-[CERC2014]Virus synthesis【PAM,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4762 题目大意 长度为nnn的目标串&#xff0c;开始一个空串&#xff0c;可以执行以下操作 在头或者尾加一个字符复制一个该串的逆串放在后面 求最少操作次数。 解题思路 我们可以知道答案肯定是一个回文串然后剩下的暴力…

I - Trade Gym - 100212I 网络流

网络流好题 给出A、B两个点集&#xff0c;A、B之间有边相连&#xff0c;而A和B的内部均无边相连。 题目要求求出最多删除A、B之间的多少边&#xff0c;才能使得A中点的度数至少都为2&#xff0c;B中点的度数也至少都为2。 先求出每个点的度数&#xff0c;从每个点v出发&…