mysql触发器

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...)的触发器。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值