1、触发器是什么?
触发器是与表有关的数据库对象,满足定义的条件时触发,并执行触发器中定义的语句。并且只对永久表创建,不能对临时表。
2、触发器的作用是什么?
协助应用在数据库端保持数据的完整性。
3、触发器的基本使用方法
以表emp,dept为例来解释。
create table emp(id int auto_increment, ename varchar(20), sal decimal(10,2), deptno int);
create table dept(id int auto_increment, deptno int, deptname varchar(20));
目前仅创建了两个空表。下面开始讲解触发器的基本使用方法。
a)创建触发器
将结束符从分号变为双斜杠。
delimiter //
create trigger ins_emp after insert on emp for each row begin
insert into dept values (id, deptno, deptname) values (new.id,new.deptno, new.deptname);
end;
//
delimiter ;
解释:创建一个名称为 ins_emp的触发器在约束后触发,触发事件为emp表的insert事件,在emp表进行insert操作时触发表dept也执行insert操作,将插入表emp的deptno, ename值插入到dept对应的deptno , deptname字段中。
create trigger ins_emp(触发器名称) after(约束后触发,还可以是约束前触发 before) insert (触发事件,还可以是update、delete)on emp(表名) for each row
begin
insert into dept values (deptno, deptname) values (new.deptno, new.ename);(具体的触发操作)
end;
验证触发器:emp表中的ename,deptno数据同时查无到了dept表中的deptname,deptno中。
对表emp创建了触发器ins_emp后,不能再对emp表创建触发器。同一个表相同触发事件的相同触发事件,只能定义一个触发器。
触发器触发顺序:
在对表创建触发器,但是触发事件insert、update不同,触发约束before、after也不同的情况下的操作顺序。
1)有重复记录,即要进行update又要进行insert操作,触发顺序为:
before insert、 before update、 after update。
2)无重复记录,就是简单执行insert操作,触发顺序为:
before insert、 after insert。
b) 删除触发器
drop trigger 触发器名称;
c) 查看触发器
show triggers \G
系统表查看方法:
desc triggers;
select * from triggers where trigger_name="触发器名称" \G
注意:
不能在触发器中显示使用开始或者结束事务的语句,如start transaction\ commit, rollback.
不能调用将数据返回客户端的存储程序,也不能采用call语句,但是允许存储程序通过参数将数据返回触发程序,也就是存储过程或者函数通过out、intout类型的参数将数据返回触发器,但是不能直接调用返回数据的过程。
触发顺序是按照before操作、行操作、after操作执行,任何一部出现错误不会继续执行剩下的操作。