目录
一、触发器的魅力
二、创建触发器
1.创建AFTER触发器
2.创建BEFORE触发器
三、查看触发器
1.查看触发器
2.查看触发器的详细信息
四、删除触发器
一、触发器的魅力
同存储过程和函数类似,MySQL中的触发器也是存储在系统内部的一段程序代码,可以把它看作是一个特殊的存储过程。所不同的是,触发器无需人工调用,当程序满足定义条件时就会被MySQL自动调用。这些条件可以称为触发事件,包括INSERT、UPDATE和DELETE操作。
触发器常被用在数据库端确保数据的完整性。例如,在具体开发项目时,常会遇到如下情况,当在用户表中插入一个新用户后,用户总书必须要自动加1。就是在对表执行某项操作后,需要自动进行一些处理。此时就可以使用触发器处理数据库对象,可以创建一个触发器对象,每添加一条学生记录,就执行一次计算学生总数的操作,这样可以保证每次添加学生记录后,学生总数与学生记录数一致。
二、创建触发器
创建触发器的语法形式如下:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name FOR EACH ROW trigger_body
上述语句中,trigger_name表示触发器的名称。trigger_time表示触发器的触发时机,可以取值为BEFORE或者AFTER,BEFORE是在检查约束前触发,而AFTER是在检查约束后触发。trigger_event表示触发事件,可以是INSERT、UPDATE或者DELETE。
table_name表示建立触发器的表名。FOR EACH ROW表示数据表中任意一条记录满足触发条件都会激活触发器。trigger_body表示触发器激活后执行的SQL语句。
注:触发器只能创建在永久表上,不能创建在临时表上。
1.创建AFTER触发器
AFTER触发器是指触发器监视的触发事件执行之后,再激活触发器,激活后所执行的操作无法影响触发器所监视的事件。
AFTER触发器可以根据所监视的事件分为三种,分别是INSERT型、UPDATE型和DELETE型。
型(创建订单)
对于INSERT型触发器而言,新插入的行使用NEW表示,引用行中的字段值可以使用“NEW.字段名”。
型(修改订单)
对于UPDATE型触发器而言,修改操作之前的记录使用OLD表示,引用此条记录中的字段值可以使用“OLD.字段名”;修改操作后的记录使用NEW表示,引用此条记录中的字段值可以使用“NEW.字段名”。
型(删除订单)
对于DELETE型触发器而言,被删除的一行记录使用OLD表示,引用此条记录中的字段值可以使用“OLD.字段名”。
2.创建BEFORE触发器
BEFORE触发器是指触发器在所监视的触发事件执行之前激活,激活后执行的操作先于监视的事件,这样就有机会进行一些判断,或修改即将发生的操作。
BEFORE触发器也可以根据监视事件分为三种,分别是INSERT型、UPDATE型和DELETE型。
三、查看触发器
1.查看触发器
在MySQL中,对同一个表相同触发时机的相同触发事件,只能定义一个触发器。
使用SHOW TRIGGERS语句可以查看MySQL中已经存在的触发器,基本语法形式如下:
SHOW TRIGGERS \G
查询结果中的主要参数及其意义如下:
Trigger:表示触发器名称。
Event:表示触发器的激活事件,如INSERT、UPDATE或DELETE。
Table:表示定义触发器的表。
Statement:表示触发器体,即触发器激活时执行的语句。
Timing:表示触发器的触发时机。值为BEFORE或AFTER。
使用SHOW TRIGGERS语句不仅可以查看所有触发器,也可以查看某个表上创建的触发器,其基本语法格式如下:
SHOW TRIGGERS FROM db_name LIKE ‘table_name’ \G
其中db_name表示数据库名,table_name表示表名。
另外,如果用户需要精确查看某一个触发器,也可以使用SHOW TRIGGERS语句,其基本语法形式如下:
SHOW TRIGGERS WHERE `TRIGGER` LIKE ‘trigger_name%’\G
精确查看某一个触发器时,WHERE子句中的列名TRIGGER需要使用反引号“`”,该符号位于键盘左上角。
2.查看触发器的详细信息
MySQL中所有触发器的定义都存储在系统数据库information_schema中的triggers表中,可以通过查询语句SELECT查看,具体语法形式如下:
SELECT * FROM information_schema.triggers WHERE trigger_name=’tri_name’;
主要参数及其意义如下:
TRIGGER_SCHEMA:表示触发器所属数据库。
TRIGGER_NAME:表示触发器名。
EVENT_MANIPULATION:表示触发器的激活事件。
EVENT_OBJECT_TABLE:表示触发器所属数据表。
ACTION_ORIENTATION:表示每条记录所发生改变都会激活触发器。
ACTION_TIMING:表示触发器执行的时机。
CREATED:表示触发器创建时间。
四、删除触发器
使用DROP TRIGGER语句可以删除MySQL中定义的触发器,基本语法形式如下:
DROP TRIGGER data_name.trigger_name;
上述语句中,data_name表示数据库名,trigger_name表示触发器名。