温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么利用数据库触发器实现数据的同步

发布时间:2021-11-04 11:54:54 来源:亿速云 阅读:176 作者:iii 栏目:关系型数据库

本篇内容主要讲解“怎么利用数据库触发器实现数据的同步”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么利用数据库触发器实现数据的同步”吧!

一、什么是触发器

数据库触发器是一个与表相关联的,存储的PL/SQL 语句。每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。

触发器的应用场景如下:

  • 复杂的安全性检查

  • 数据的确认

  • 数据库审计

  • 数据的备份和审计

二、创建Oracle触发器的语法

1
2
3
4
5
6
7
8
9
CREATE [OR REPLACE] TRIGGER trigger_name                                    
{BEFORE | AFTER }                                    
{INSERT | DELETE | UPDATE [OF column [, column …]]}                                    
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]                                    
ON [schema.]table_name | [schema.]view_name                                    
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]                                    
[FOR EACH ROW ]                                    
[WHEN condition]                                    
PL/SQL_BLOCK | CALL procedure_name;                                    

其中:

  • BEFORE 和AFTER指出触发器的触发时序分别为前触发和后触发方式,前触发是在执行触发事件之前触发当前所创建的触发器,后触发是在执行触发事件之后触发当前所创建的触发器。

  • FOR EACH ROW选项说明触发器为行触发器。

  • 行触发器和语句触发器的区别表现在:行触发器要求当一个DML语句操走影响数据库中的多行数据时,对于其中的每个数据行,只要它们符合触发约束条件,均激活一次触发器;而语句触发器将整个语句操作作为触发事件,当它符合约束条件时,激活一次触发器。

  • 当省略FOR EACH ROW 选项时,BEFORE 和AFTER 触发器为语句触发器,而INSTEAD OF 触发器则只能为行触发器

  • REFERENCING 子句说明相关名称,在行触发器的PL/SQL块和WHEN 子句中可以使用相关名称参照当前的新、旧列值,默认的相关名称分别为OLD和NEW。触发器的PL/SQL块中应用相关名称时,必须在它们之前加冒号(:),但在WHEN子句中则不能加冒号。

  • WHEN 子句说明触发约束条件。Condition 为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/SQL 函数。WHEN 子句指定的触发约束条件只能用在BEFORE 和AFTER 行触发器中,不能用在INSTEAD OF 行触发器和其它类型的触发器中。

  • 当一个基表被修改( INSERT, UPDATE, DELETE)时要执行的存储过程,执行时根据其所依附的基表改动而自动触发,因此与应用程序无关,用数据库触发器可以保证数据的一致性和完整性。

三、Oracle触发器的类型

  • 行级触发器:对DML语句影响的每个行执行一次,例如,一条update语句更新了100条数据,如果我们针对update定义了行级触发器,那么行级触发器将会被触发100次 。

  • 语句级触发器:对每个DML语句执行一次,例如,一条update语句更新了200条数据,如果我们针对update定义了语句级触发器,那么语句级触发器将会被触发1次 。

四、利用数据库触发器实现数据的同步

1
2
3
4
5
6
7
8
9
create or replace trigger sync_salary                                    
after update                                    
on emp                                    
for each row                                    
begin                                    
  --当主表更新后,自动更新备份表。                                    
  update emp_back set sal=:new.sal where empno=:new.empno;                                    
end;                                    
/                                    
  • 在上面的例子中,当我们更新了主表emp的薪水后,这个行级触发器将会被自动执行更新备份表中的员工的薪水。

到此,相信大家对“怎么利用数据库触发器实现数据的同步”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI