MySQL触发器

1 创建
CREATE TRIGGER

CREATE TRIGGER trigger_name trigger_time trigger_event
    ON tbl_name FOR EACH ROW trigger_stmt

作用:检查给表插入新的值或者进行表内的数值计算之类的更新。
只能定义在基本表上,不能定义在视图上。

trigger_time:触发程序的动作时间,BEFORE或AFTER

trigger_event:指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:
(1)INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句实现插入数据。

(2)UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句更新数据。

(3)DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句删除数据。

trigger_stmt:当触发程序激活时执行的语句。如果执行多个语句,可使用BEGIN … END复合语句结构。

例1:
对SC的Grade属性修改时,若分数增加了10%,则将此次操作记录到SC_U表中:
SC_U(Sno,Cno,Oldgrade,Newgrade)

CREATE TRIGGER SC_T
AFTER UPGRADE OF Grade ON SC
REFERENCING
    OLD row AS OldTuple,
    NEW row AS NewTuple
FOR EACH ROW   //行级触发器
WHEN (NewTuple.Grade>=1.1*OldTuple.Grade)
  INSERT INTO SC_U(Sno,Cno,OldGrade,NewGrade)
VALUES(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade)

例2:

CREATE TRIGGER Student_Count
AFTER INSERT ON Student
REFERENCING
    NEW TABLE AS DELTA
FOR EACH STATEMENT
    INSERT INTO StudentInsertLog(Numbers)
    SELECT COUNT(*) FROM DELTA

2 删除
DROP TRIGGER

DROP TRIGGER [schema_name.]trigger_name

方案名称(schema_name)可选。如果省略了schema(方案),将从当前方案中舍弃触发程序。DROP TRIGGER语句需要相应权限。

3 激活
数据表上定义多个触发器,执行顺序:
(1)执行表上的BEFORE触发器;
(2)激活触发器的SQL语句;
(3)执行表上的AFTER触发器。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值