达梦数据库的触发器管理

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

1、创建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');

create table tab_before_result (type varchar(20),num int);
达梦数据库的触发器管理_第1张图片

创建触发器
create or replace trigger trigger_before
before insert on tab_before
begin
insert into tab_before_result select 'before',count(*) from tab_before;
end;
/
达梦数据库的触发器管理_第2张图片

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

查看的结果是只有3条初始化的记录,第4条插入的记录未统计。
select * from tab_before_result;
达梦数据库的触发器管理_第3张图片

2、创建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');

create table tab_after_result (type varchar(20),num int);
达梦数据库的触发器管理_第4张图片

创建触发器
create or replace trigger trigger_after
after insert on tab_after
begin
insert into tab_after_result select 'after',count(*) from tab_after;
end;
/
达梦数据库的触发器管理_第5张图片

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

查看的结果是统计最新的4条初始化的记录,包含了第4条插入的记录。
select * from tab_after_result;
达梦数据库的触发器管理_第6张图片

3、创建DLL事件触发器测试
准备工作
创建触发器前先建两张测试表(数据表和结果表),当数据库发生DDL语句操作时会执行触发器里的语句内容。
测试1:在数据表插入记录,看是否会执行触发器里的语句。
目的2:创建一张新表看结果表发生的变化,看是否会执行触发器里的语句。
create table tab_ddl(id int, name varchar(20));
create table tab_ddl_result (type varchar(20),num int);
达梦数据库的触发器管理_第7张图片

创建触发器
create or replace trigger trigger_ddl
before create
on schema
begin
insert into tab_ddl_result select 'ddl',count(*) from tab_ddl;
end;
/
达梦数据库的触发器管理_第8张图片

测试验证
插入一条数据测试,结果是没有执行触发器
insert into tab_ddl values(1,'aaa');
达梦数据库的触发器管理_第9张图片

创建一张表测试,结果是执行了触发器里的语句
create table tab_ddl2(id int, name varchar(20));
达梦数据库的触发器管理_第10张图片