其他分享
首页 > 其他分享> > 触发器

触发器

作者:互联网

定义

是指一段代码,当触发某个事件的时候,自动执行该段代码。

应用场景

  1.数据库中相关表实现级联
  2.实时监控某张表的字段数据改变,然后对应执行某些操作
  3.自动生成某些业务编号

触发器主要有

  【After|before】【insert|update|delete】

1.触发器查看

show triggers或者show triggers from user_db;
通过information_schema.triggers表查看触发器:
select * from information_schema.triggers;

2.删除trigger

drop trigger if exists trigger_name

3.完整的测试

drop table if exists tmp1;
drop table if exists tmp2;
create table tmp1 (id int, name varchar(128)) default charset='utf8';
create table tmp2 (fid int, name varchar(128)) default charset='utf8';
insert into tmp1 values(1, '爱E族');
insert into tmp2 values(1, '爱E族');
创建触发器
DELIMITER $
drop trigger if exists tmp1_update$
create trigger tmp1_update after update on tmp1
for each row
begin
update tmp2 set name=new.name where fid=new.id;
end$
DELIMITER ;
创建触发器
DELIMITER $
drop trigger if exists tmp1_insert$
create trigger tmp1_insert before insert on tmp1
for each row
begin
set new.n2 = new.n1*5;
end$
DELIMITER ;
更新操作与if结合
if old.type=1 then
update table ...;
elseif old.type=2 then
update table ...;
end if;
CREATE trigger updatetbl_slope
AFTER update on tbl_slope for each row
BEGIN
if EXISTS(SELECT * FROM user A WHERE A.ID=new.UNIFIEDCODE LIMIT 1)
THEN
update user set LastTime=NOW() where ID=NEW.UNIFIEDCODE;
else
insert into checkupdates VALUES(new.UNIFIEDCODE, ‘TBL_AVALANCHE’, NOW());
END if;
END
注意
在使用触发器的时候,我们常常会考虑到,是否可一在触发创建的时候先检查是否有该数据,如果没有就创建。反之则更新数据。
这个在触发器中也是可以实现的,如:AFTER update|create on tbl_slope for each row。但是这样会是得模糊了触发器的真实实现,
我个人觉得还是拆开更简洁,更易于维护。
 

标签:insert,触发器,trigger,new,table,tmp1
来源: https://www.cnblogs.com/topass123/p/16523203.html