官网说明如下:

触发器是与表关联的命名数据库对象,并在表发生特定事件时激活触发器的一些用途是执行对要插入表中的值的检查,或者对更新中涉及的值执行计算。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

触发器定义为在语句插入,更新或删除关联表中的行时激活这些行操作是触发事件。例如,可以通过 INSERTLOAD DATA语句插入行,并为每个插入的行激活插入触发器。可以将触发器设置为在触发事件之前或之后激活。例如,您可以在插入表中的每一行之前或更新的每一行之后激活一个触发器。 mysql 触发器 随笔

 

创建触发器语法

 1 CREATE  2     [DEFINER = user]  3  TRIGGER trigger_name  4  trigger_time trigger_event  5  ON tbl_name FOR EACH ROW  6  [trigger_order]  7  trigger_body  8 
 9 trigger_time: { BEFORE | AFTER } 10 
11 trigger_event: { INSERT | UPDATE | DELETE } 12 
13 trigger_order: { FOLLOWS | PRECEDES } other_trigger_name
trigger_name  :是触发器名称

trigger_time是触发动作时间。它可以是BEFORE或 AFTER表示触发器在每行要修改之前或之后激活。

trigger_event表示激活触发器的操作类型。trigger_event允许这些 值:

trigger_event不代表激活触发器的文字类型的SQL语句,因为它表示一种表操作。例如, INSERT触发器不仅激活INSERT语句而且 激活LOAD DATA语句,因为两个语句都将行插入表中。

一个可能令人困惑的例子是INSERT INTO ... ON DUPLICATE KEY UPDATE ...语法: BEFORE INSERT触发器为每一行激活,后跟AFTER INSERT触发器或两者BEFORE UPDATEAFTER UPDATE触发器,具体取决于行是否有重复的键。

注意

级联外键操作不会激活触发器。  触发器不能用于 或用于 引用生成的列。

trigger_body是触发器激活时要执行的语句。 要执行多个语句,请使用 BEGIN ... END 复合语句构造

 

1 CREATE TRIGGER upd_check BEFORE UPDATE ON account 2  FOR EACH ROW 3  BEGIN 4            IF NEW.amount < 0 THEN 5                SET NEW.amount = 0; 6            ELSEIF NEW.amount > 100 THEN 7                SET NEW.amount = 100; 8  END IF; 9        END;//
1 /*创建一张表*/
2 CREATE TABLE account (
3   acct_num INT,
4   amount DECIMAL(10,2)
5  );

创建触发器

 1 CREATE TRIGGER ins_sum 2 BEFORE INSERT 3 ON account 4 FOR EACH ROW 5 SET @sum = @sum + NEW.amount; 

设置变量值为0

 SET @sum = 0;  

插入语句时 执行触发器

 INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00); 

语句执行@sum后 的值INSERT是 14.98 + 1937.50 - 100,或 1852.48

 

  SELECT @sum AS 'Total amount inserted'; 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄