1、定义:触发器(trigger),在SQL执行insert、update、delete等DML语句时,自动执行的一组SQL语句,不能主动执行。
如每次delete时都要insert到备份表中:
# 定义触发器 #before delete代表 在delete之前触发 create trigger tr_delete before delete on employee for each row#每一行都是相同设置 begin #insert语句 end; # 当执行delete语句时,则触发了触发器,执行触发器代码 delete from employee where id=101;2、触发器的类型,按触发时间点不同分为:
1)前触发器:在执行insert、update、delete等DML语句之前自动执行。
2)后触发器:在执行insert、update、delete等DML语句之后自动执行。
3、创建前触发器,用法如下:
#对employee表的salary字段进行更新前,判断salary小于0,需要显示消息 #on employee说明触发器属于employee表 #for each row对于表中任意一行数据都会触发 create trigger tr_update before update on employee for each row begin #触发器中根据需要可以使用old、new关键字分别存放更新前和更新后的全部数据 if new.salary<0 then #手动抛出异常,异常代码是45000,显示错误信息是salary小于0 SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='An error occurred'; end if; end; -- 验证触发器 update employee set salary=-1 where id=101; 4、创建后触发器,用法如下: #创建后触发器,在添加之后执行 create trigger tr_insert after insert on employee for each row begin if new.salary>10000 then signal sqlstate '45000' set MESSAGE_TEXT='An error occurred'; end if; end; -- 验证触发器 insert into employee(id,salary) values(131,20000); 5、删除触发器: drop trigger tr_delete;6、注意:Mysql的同一张表中不支持相同的触发时间点(before...)和触发事件(insert...)的触发器。