图 | 自制
文 | 挨踢小子
——此文仅代表个人学习所得,欢迎阅览
如有侵权,请私信删除
概述:
MYSQL的触发器和存储过程一样,都是嵌入到MYSQL的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT 、UPDATE、DELETE 语句。如果定义了触发程序,当数据库执行这些语句的时候就会激发触发器执行相应的操作。触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。
创建触发器:
触发器(trigger)是个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL 语句来调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MYSQL自动调用。比如当对fruits 表进行操作(INSERT、DELETE、或UPDATE)时就会激活它执行。
触发器可以查询其他表,而且可以包含复杂的SQL语句,他们主要用于满足复杂的业务规则或要求。例如:可以根据客户当前的账户状态,控制是否允许插入新订单。
1、创建只有一个执行语句的触发器
基本语法:
CREATE TRIGGER trigger_name trigger_time trigger_event ON tb1_name FOR EACH ROW trigger_stmt
其中:trigger_name 标识触发器名称,用户自行指定;trigger_time标识触发时机,可以指定为before或after;trigger_event 标识触发事件,包括INSERT 、UPDATE、和DELETE;tb1_name标识建立触发器的表名,即在哪张表上建立触发器;trigger_stmt是触发器执行语句。
例如:创建一个单执行语句的触发器
CREATE TABLE account (acct_num int ,amount DECIMAL(10,2));
CREATETRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum=@sum+new.amount;
首先创建一个account表,表中有两个字段,分别为:acct_num字段(定义为int类型),amount字段(定义成浮点类型);
其次创建一个名为 ins_sum的触发器,触发的条件是向数据表account 插入数据之前,对新插入的amount字段值进行求和计算。
解释:首先创建一个account表,在向表account插入数据之前,计算所有新插入的account表的amount值之和,触发器的名称为ins_sum,条件是在向表插入数据之前触发。
2、创建有多个执行语句的触发器
基本语法:
CREATE TRIGGER trigger_name trigger_time trigger_event ON tb1_name FOR EACH ROW BEGIN
语句执行列表
END
其中 trigger_name标识触发器的名称,用户自行指定;trigger_time标识触发时机,可以指定为before或after ;trigger_event标识触发事件,包括INSERT、UPDATE、和DELETE ;tb1_name标识建立触发器的表名,即在那张表上建立触发器,触发器程序可以使用BEGIN和END 作为开始和结束中间包含多条语句。
●作者简介:挨踢小子,现在就读于某某大学,一个一无所有,努力拼搏不负青春的小子,喜欢文字,爱好读书。公众号: 挨踢小子(LN-aitixiaozi )。