数据库之触发器

目录

一、触发器的魅力

二、创建触发器

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型。

1.INSERT型(创建订单)

对于INSERT型触发器而言,新插入的行使用NEW表示,引用行中的字段值可以使用“NEW.字段名”。

2.UPDATE型(修改订单)

对于UPDATE型触发器而言,修改操作之前的记录使用OLD表示,引用此条记录中的字段值可以使用“OLD.字段名”;修改操作后的记录使用NEW表示,引用此条记录中的字段值可以使用“NEW.字段名”。

3.DELETE型(删除订单)

对于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表示触发器名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳阳大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值