MYSQL中的触发器

时间:2021-10-29 05:06:24

MYSQL中的触发器

图 | 自制

文 | 挨踢小子

——此文仅代表个人学习所得,欢迎阅览

如有侵权,请私信删除


概述:

MYSQL的触发器和存储过程一样,都是嵌入到MYSQL的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT  UPDATEDELETE  语句。如果定义了触发程序,当数据库执行这些语句的时候就会激发触发器执行相应的操作。触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。

 

创建触发器:

触发器(trigger)是个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL 语句来调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MYSQL自动调用。比如当对fruits 表进行操作(INSERTDELETE、或UPDATE)时就会激活它执行。

触发器可以查询其他表,而且可以包含复杂的SQL语句,他们主要用于满足复杂的业务规则或要求。例如:可以根据客户当前的账户状态,控制是否允许插入新订单。


1、创建只有一个执行语句的触发器

基本语法:

CREATE   TRIGGER  trigger_name   trigger_time   trigger_event  ON  tb1_name  FOR EACH  ROW    trigger_stmt

其中:trigger_name  标识触发器名称,用户自行指定;trigger_time标识触发时机,可以指定为beforeafter;trigger_event 标识触发事件,包括INSERT   UPDATE、和DELETEtb1_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标识触发时机,可以指定为beforeafter  trigger_event标识触发事件,包括INSERTUPDATE、和DELETE tb1_name标识建立触发器的表名,即在那张表上建立触发器,触发器程序可以使用BEGINEND 作为开始和结束中间包含多条语句。

●作者简介:挨踢小子,现在就读于某某大学,一个一无所有,努力拼搏不负青春的小子,喜欢文字,爱好读书。公众号:  挨踢小子(LN-aitixiaozi )。

MYSQL中的触发器