触发器Trigger介绍
来源:互联网 发布:淘宝注册商家 编辑:程序博客网 时间:2024/05/29 06:55
触发器简介
触发器是数据库的一种,编码方式类似于存储过程,当有DML语句对表进行操作的时候,可以引起触发器的执行,从而实现对表的数据一致性维护;
通过触发器(Trigger)可以实现对某些表的监控,当监控表数据有新增、删除、修改的操作的时候,可以实现用户自定义的功能,比如:当基础表发生变化时,以基础表为基准的接口表数据的一致性维护;
触发器基础语法
create or replace trigger [触发器名称]
<after|before|instead of > <insert | update | delete> of [字段] on [表名]
for each row
declare
[变量声明 ]
begin
[执行代码 ]
end;
解说:1.触发器监控的动作 insert \update \delete ,其中如果监听多个动作,则使用 or 连接;
2.监听的表 用 [on 表名] 形式,如果监听一个字段,则 [of 字段 on 表名 ] ;如果所有字段都监听,则 [ on 表名],可以没有of 字段;
3.for each row 是行级触发器的标志;如果是行级触发器,DML执行每条记录都会执行触发器,如果是语句级触发器则是一条语句执行一次触发器;
4.<after | before | instead of > 标示触发器与DML语句的执行前后关系,After 指DML实施后触发器才会执行,Before是指在DML语句执行实施之前触发器则先执行,而Instead of一般是用于更新视图的;
5.触发器的命名规范:
Trigger_name = tableName_trg_<R|S><A|B|I><I|U|D>
触发器名限于30个字符。必须缩写表名,以便附加触发器属性信息。
<R|S>基于行级(row)还是语句级(statement)的触发器
<A|B|I>after, before或者是instead of触发器
<I|U|D>触发事件是insert,update还是delete。
触发器小实例
以下触发器实现对表userinfo的监听,如果表数据有 insert、update、delete操作则调用触发器;但是只有新增的记录或者是修改用户名称uname字段的时候,才会执行代码段;将修改或者新增的记录信息更新到表userLogInfo中;
create or replace trigger userinfo_trg
after insert or update or delete on userinfo
for each row
declare
v_num varchar(10);
begin
if :old.uname <> :new.uname or :old.ucode is null then
--只有当用户名称修改或者新增时,才会执行触发器
select count(*) into v_num from userLogInfo us;
if v_num <> 0 then--如果没有这个记录,则不删除
delete from userLogInfo us where us.ucode = :new.ucode;
end if;
insert into userLogInfo
(ucode, Newnname, Oldnname, Newphone)
values
(:new.ucode, :new.uname, :old.uname, :new.uphonne);
end if;
end;
触发器是数据库的一种,编码方式类似于存储过程,当有DML语句对表进行操作的时候,可以引起触发器的执行,从而实现对表的数据一致性维护;
通过触发器(Trigger)可以实现对某些表的监控,当监控表数据有新增、删除、修改的操作的时候,可以实现用户自定义的功能,比如:当基础表发生变化时,以基础表为基准的接口表数据的一致性维护;
触发器基础语法
create or replace trigger [触发器名称]
<after|before|instead of > <insert | update | delete> of [字段] on [表名]
for each row
declare
[变量声明 ]
begin
[执行代码 ]
end;
解说:1.触发器监控的动作 insert \update \delete ,其中如果监听多个动作,则使用 or 连接;
2.监听的表 用 [on 表名] 形式,如果监听一个字段,则 [of 字段 on 表名 ] ;如果所有字段都监听,则 [ on 表名],可以没有of 字段;
3.for each row 是行级触发器的标志;如果是行级触发器,DML执行每条记录都会执行触发器,如果是语句级触发器则是一条语句执行一次触发器;
4.<after | before | instead of > 标示触发器与DML语句的执行前后关系,After 指DML实施后触发器才会执行,Before是指在DML语句执行实施之前触发器则先执行,而Instead of一般是用于更新视图的;
5.触发器的命名规范:
Trigger_name = tableName_trg_<R|S><A|B|I><I|U|D>
触发器名限于30个字符。必须缩写表名,以便附加触发器属性信息。
<R|S>基于行级(row)还是语句级(statement)的触发器
<A|B|I>after, before或者是instead of触发器
<I|U|D>触发事件是insert,update还是delete。
触发器小实例
以下触发器实现对表userinfo的监听,如果表数据有 insert、update、delete操作则调用触发器;但是只有新增的记录或者是修改用户名称uname字段的时候,才会执行代码段;将修改或者新增的记录信息更新到表userLogInfo中;
create or replace trigger userinfo_trg
after insert or update or delete on userinfo
for each row
declare
v_num varchar(10);
begin
if :old.uname <> :new.uname or :old.ucode is null then
--只有当用户名称修改或者新增时,才会执行触发器
select count(*) into v_num from userLogInfo us;
if v_num <> 0 then--如果没有这个记录,则不删除
delete from userLogInfo us where us.ucode = :new.ucode;
end if;
insert into userLogInfo
(ucode, Newnname, Oldnname, Newphone)
values
(:new.ucode, :new.uname, :old.uname, :new.uphonne);
end if;
end;
1 0
- 触发器Trigger介绍
- 触发器 trigger ..
- 触发器(Trigger)
- 触发器trigger
- 触发器trigger
- 触发器Trigger
- 触发器 trigger
- 触发器实例-trigger
- 触发器(Trigger)(一)
- 触发器(Trigger)(二)
- 触发器(Trigger)(三)
- 触发器(Trigger)(四)
- 触发器(Trigger)(五)
- 触发器(Trigger)(六)
- 触发器(Trigger)(七)
- 触发器(Trigger)(八)
- 触发器(Trigger)(九)
- 触发器Trigger的创建
- HTML5中本地存储与本地数据库
- Android画图最基本的三个对象(Color,Paint,Canvas)
- LeetCode 67 - Add Binary
- Chapter 4 Java Collections
- squeeze(s1,s2),把字符串s1中与s2字符的相同的部分去掉
- 触发器Trigger介绍
- POST至本页面时,需要对表单内容进行一个if的判断
- android - Thread Pool线程池
- android 5.1.1 下修改出厂默认输入法
- android:TextView字段单个字颜色,大小等样式的设定
- Java并发编程之十二:可重入内置锁
- ubuntu14.04下安装tun/tap
- 提高工作的效率
- VS2013 fatal error LNK1207: PDB 格式不兼容