MySQL数据库触发器(trigger)的创建

来源:互联网 发布:java初中高级工程师 编辑:程序博客网 时间:2024/06/04 18:53

`[TOC]

一、触发器介绍

触发器,顾名思义就是通过某个特定的事件来触发另外一个事件,我们把”通过某个特定的事件“称为触发条件,这个条件有INSERT,UPDATE,DELETE,最终触发另外一个事件就是我们具体要数据库操作的步骤。

触发器其是一种特殊的存储过程。一般的存储过程是通过存储过程名直接调用,而触发器主要是通过事件(增、删、改)进行触发而被执行的。其在表中数据发生变化时自动强制执行。

常见的触发器有两种:after(for)、instead of,用于insert、update、delete事件。after(for) 表示执行代码后,执行触发器instead of 表示执行代码前,用已经写好的触发器代替你的操作

二、触发器语法

注意:触发条件和触发事件不能作用于同一张表中!

创建一个一条执行语句的触发器:

CREATE TRIGGER 触发器名 [BEFORE/AFTER] [INSERT/UPDATE/DELETE] ON 表名 FOR EACH ROW 执行语句;

创建一个多条执行语句的触发器:

CREATE TRIGGER 触发器名 [BEFORE/AFTER] [INSERT/UPDATE/DELETE] ON 表名 FOR EACH ROW BEGIN 执行语句列表 END;

一般情况下,MySQL默认是以“;”作为结束执行语句。在创建触发器过程中需要用到“;”。为了解决这个问题,可以用DELIMITER语句。如“DELIMITER
&&”,可以将结束符号变成“&&”。当触发器创建完成后,可以用命令“DELIMITER
;”来将结束符号变成“;”。

查看触发器:

SHOW TRIGGERS;

删除触发器:

DROP TRIGGER 触发器名;

三、触发器示例

1.常规触发器

CREATE TRIGGER `UPDATE_WEIXIN_FANS_SEX` AFTER INSERT ON `o_fans_sex` FOR EACH ROWBEGIN    UPDATE weixinSET weixin.male_powder = concat(    ROUND(        (            new.man_count / (                new.women_count + new.man_count + new.unknow_count            )        ),        2    ) * 100,    '%'), weixin.female_powder = concat(    ROUND(        (            new.women_count / (                new.women_count + new.man_count + new.unknow_count            )        ),        2    ) * 100,    '%')WHERE    weixin.wxh_name = new.wxh_name;END;

2.一般情况下,MySQL默认是以“;”作为结束执行语句。在创建触发器过程中需要用到“;”。为了解决这个问题,可以用DELIMITER语句。如“DELIMITER
&&”,可以将结束符号变成“&&”。当触发器创建完成后,可以用命令“DELIMITER
;”来将结束符号变成“;”。
创建一个由DELETE触发多个执行语句的触发器dept_trig2。

(1) 创建dept_trig2触发器的SQL代码如下:

DELIMITER &&CREATE TRIGGER dept_trig2 AFTER DELETEON department FOR EACH ROWBEGININSERT INTO trigger_time VALUES('22:30:30');INSERT INTO trigger_time VALUES('23:50:50');END&&DELIMITER ;
原创粉丝点击