mysql触发器

mysql的触发器

什么是mysql触发器

  • 它是一个特殊的存储过程,它的执行不是程序调用,也不是手动启动,而是由事假触发,比如当对一个表进行操作(insert、delete、update)等时就会激活它执行,触发器经常用于加强数据的完整约束和业务规则等。例如:当雇员表中增加一个雇员时,雇员总数就应该改变,因此可以针对雇员表创建一个触发器,每当增加一个雇员时,就进行一次雇员总数的计算操作,从而保证雇员数与记录数的一致性。

创建trigger

  1. 语法:
create trigger 触发器名 before|after 触发事件insert|ddelete|update on 表名 for each row
begin 
    触发器程序体 
end

# for each row:触发器执行间隔,表示每一行执行一次动作,而不是针对整个表执行一次;
这时候当执行insert操作影响几行时total会自增加几,
当执行update影响几行时total就会自减几,因为for each row表示每一行执行一次动作就执行一次触发器
  1. 查看触发器
MariaDB [my_test]> show triggers\G;
MariaDB [my_test]> \d $  # 将mysql结束符临时改为$

当emp雇员增加时emp_total表中的total数加一,且自动更新到emp2表

MariaDB [my_test]> create trigger emp_total_trigger1 after insert on emp for each row 
    -> begin
    -> update emp_total set total=total+1;
    -> insert into emp2 values(new.empno,new.ename,new.job,new.mgp,new.hiredate,new.sal,new.comm,new.deptno);
    -> end$
Query OK, 0 rows affected (0.01 sec)

当emp雇员减少时时emp_total表中的total数减一

MariaDB [my_test]> create trigger emp_total_trigger2 before delete on emp for each row
    -> begin
    ->  update emp_total set total=total-1;
    -> end$
Query OK, 0 rows affected (0.04 sec)

emp表中的数据删除后,还自动将emp2表中的对应数据删除

MariaDB [my_test]> create trigger emp_total_trigger3 before delete on emp for each row  
begin 
delete from emp2 where empno=old.empno; # 这种删除更新一定要使用主键
update emp_total set total=total-1;
end$
注:mariadb尚不支持“一个表具有相同操作时间和事件的多个触发器”,此触发器会和上面delete事件触发器的冲突,删除一个即可

当emp表中的ename改变之后,emp2表中的enamel也随着改变

MariaDB [my_test]> create trigger emp_total_trigger3 before update on emp for each row 
    -> begin
    -> update emp2 set ename=new.ename where ename=old.ename;
    -> end$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值