初识触发器

1、什么是触发器?

   触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就
会激活它执行。
触发器经常用于加强数据的完整性约束和业务规则等。 触发器创建语法四要素:
        1.监视地点(table)
        2.监视事件(insert/update/delete) 
        3.触发时间(after/before) 
        4.触发事件(insert/update/delete)

 2、触发器的语法

create trigger 触发器名称(自定义)  触发时机 触发事件 on 添加触发器的表名(添加触发器的表名)  for each row 
触发器的执行sql语句 多条执行语句时 以 BEGIN 开始 END 结束 (多条执行语句以 英文";"隔开)

注意对同一个表相同触发时间的相同触发事件,只能定义一个触发器;可以使用old和new来引用触发器中发生变化的记录内容;
FOR EACH ROW 表示任何一条记录上的操作满足触发事件都会触发该触发器
触发时机:before(在检查约束前触发)或after(在检查约束后触发);
触发事件:insert、update和delete;

  可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。

  另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器。

 3、DELIMITER用法

一般情况下,mysql默认是以 ; 作为结束执行语句,“;” 用于向 MySQL 提交查询语句。在BEGIN与END之间的执行语句列表中每个 SQL 语句的结尾都有个 “;”,如果这时候,每逢 “;” 就向 MySQL 提交的话,当然会出问题了。
 为解决此问题可用DELIMITER,如:DELIMITER ||,可以将结束符号变成||(符号是自己定义的,也可以是$$)
 当触发器创建完成后,可以用DELIMITER ;来将结束符号变成;

例子:

 

delimiter $$
create trigger userTest
AFTER UPDATE
on user for EACH ROW
BEGIN
UPDATE user_copy SET nuval=nuval+(new.nuval-old.nuval) where id=new.id;
UPDATE user_copytwo SET nuval=nuval+(new.nuval-old.nuval) where id=new.id;
END;$$
delimiter ;

 4、在BEGIN...END语句中也可以定义变量,但是只能在BEGIN...END内部使用:

DECLARE var_name var_type [DEFAULT value] #定义变量,可指定默认值
SET var_name = value  #给变量赋值

 5、NEW和OLD的使用:

 

posted @ 2019-07-18 09:30  我爱香香  阅读(391)  评论(0编辑  收藏  举报