mysql复习(1):触发器

1.定义

顾名思义,触发就是满足一定条件下产生什么动作,完整的定义是触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。

2.语法:

1 CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt

trigger_name:触发器的名称

tirgger_time:触发时机,为BEFORE或者AFTER

trigger_event:触发事件,为INSERT、DELETE或者UPDATE

tb_name:表示建立触发器的表明,就是在哪张表上建立触发器

trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句

可以说MySQL创建以下六种触发器: BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE AFTER INSERT,AFTER DELETE,AFTER UPDATE

3.牛客笔试题

 1 // 题目:构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。
 2 
 3 CREATE TABLE employees_test( 
 4     ID INT PRIMARY KEY NOT NULL,
 5     NAME TEXT NOT NULL, 
 6     AGE INT NOT NULL,
 7     ADDRESS CHAR(50), 
 8     SALARY REAL 
 9 );
10 
11 CREATE TABLE audit(
12     EMP_no INT NOT NULL, 
13     NAME TEXT NOT NULL 
14 );
1 create trigger audit_log after insert on employees_test for each row begin
2 insert into audit values(new.id, new.name);
3 end

MySQL 中定义了 NEW 和 OLD,用来表示 触发器的所在表中,触发了触发器的那一行数据。

具体的例子如下:

在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;

在 UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据;

在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据;

使用方法: NEW.columnName (columnName 为相应数据表某一列名)

4.用法扩展

BEGIN与END之间的执行语句列表参数表示需要执行的多个语句,不同语句用分号隔开

tips:一般情况下,mysql默认是以 ; 作为结束执行语句,与触发器中需要的分行起冲突

     为解决此问题可用DELIMITER,如:DELIMITER ||,可以将结束符号变成||

     当触发器创建完成后,可以用DELIMITER ;来将结束符号变成;

1 DELIMITER ||
2 create trigger audit_log after insert on employees_test for each row begin
3 insert into audit values(new.id, new.name);
4 // 其他语句
5 end
6 DELIMITER ;
原文地址:https://www.cnblogs.com/zhangtu/p/14338300.html