达梦数据库的触发器管理

触发器类型有分为操做前触发、操做后触发、DLL事件触发、系统事件触发、时间触发等等,触发器与存储过程的区别是触发器不能单独执行调用,而是在用户执行特定语句时自动触发执行触发器。如下举例常见的插入事件、更新事件作演示。数据库

一、建立BEFORE触发器测试

准备工做
建立触发器前先建两张测试表(数据表和结果表),目的在数据表插入前就执行触发器里的语句,触发器里的语句是统计当前数据库的记录数。

create table tab_before(id int, name varchar(20));
insert into tab_before values(1,'aaa');
insert into tab_before values(2,'bbb');
insert into tab_before values(3,'bbb');ide

create table tab_before_result (type varchar(20),num int);

测试

建立触发器
create or replace trigger trigger_before
before insert on tab_before
begin
insert into tab_before_result select 'before',count(*) from tab_before;
end;
/

事件

测试验证

插入一条数据测试,看看是否是统计插入前的记录数
insert into tab_before values(4,'bbb');it

查看的结果是只有3条初始化的记录,第4条插入的记录未统计。
select * from tab_before_result;
table

二、建立AFTER触发器测试

建立触发器前一样也先建两张测试表(数据表和结果表),目的是在数据表插入后执行触发器里的语句,触发器里的语句是统计当前最新数据库的记录数。

create table tab_after(id int, name varchar(20));
insert into tab_after values(1,'aaa');
insert into tab_after values(2,'bbb');
insert into tab_after values(3,'bbb');class

create table tab_after_result (type varchar(20),num int);
select

建立触发器

create or replace trigger trigger_after
after insert on tab_after
begin
insert into tab_after_result select 'after',count(*) from tab_after;
end;
/
im

测试验证
插入一条数据测试,看看是否是统计插入后的记录数
insert into tab_after values(4,‘bbb’);统计

查看的结果是统计最新的4条初始化的记录,包含了第4条插入的记录。
select * from tab_after_result;

三、建立DLL事件触发器测试

建立触发器前先建两张测试表(数据表和结果表),当数据库发生DDL语句操做时会执行触发器里的语句内容。
测试1:在数据表插入记录,看是否会执行触发器里的语句。
目的2:建立一张新表看结果表发生的变化,看是否会执行触发器里的语句。

create table tab_ddl(id int, name varchar(20));
create table tab_ddl_result (type varchar(20),num int);

建立触发器

create or replace trigger trigger_ddl
before create
on schema
begin
insert into tab_ddl_result select 'ddl',count(*) from tab_ddl;
end;
/

测试验证
插入一条数据测试,结果是没有执行触发器
insert into tab_ddl values(1,‘aaa’);
建立一张表测试,结果是执行了触发器里的语句
create table tab_ddl2(id int, name varchar(20));

四、案例

tbl_slope:发生更新的表,
checkupdates:更新后插入数据的表

CREATE trigger updatetbl_slope
AFTER  update--  表示触发器是在激活它的语句之后触发
on tbl_slope
for each row -- mysql固定语法
BEGIN
 if EXISTS(SELECT * FROM checkupdates A WHERE  A.ID=new.UNIFIEDCODE LIMIT 1)
THEN
 update checkupdates  set LastTime=NOW() where TableName='TBL_AVALANCHE' and  ID=NEW.UNIFIEDCODE;
else 
insert into checkupdates VALUES(new.UNIFIEDCODE, 'TBL_AVALANCHE', NOW());
END if;
END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值