MySql的触发器

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 触发器是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。创建MySQL触发器在MySQL中,创建只有一个执行语句的触发器的基本形式如下:CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句具体的参数说明如下:触发器名:指定要创建的触发器名字。

触发器是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。

创建MySQL触发器

在MySQL中,创建只有一个执行语句的触发器的基本形式如下:

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句

具体的参数说明如下:

触发器名:指定要创建的触发器名字。

参数BEFORE和AFTER:指定触发器执行的时间。BEFORE指在触发时间之前执行触发语句;AFTER表示在触发时间之后执行触发语句。

触发事件:指数据库操作触发条件,其中,包括INSERT,UPDATE和DELETE。

表名:指定触发时间操作表的名称。

FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器。

delimiter//
create trigger auto_save_time before insert
on studentinfo for each row
    insert into timelog(savetime)values(now());
//
在向studentinfo表中插入数据时,savetime表中也会被插入一条当前系统时间的数据。

创建具有多个执行语句的触发器

CREATE TRIGGER 触发器名称 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW

BEGIN

  执行语句列表;

END

delimiter//
create trigger delete_time_info after delete
on studentinfo for each row
begin
    insert into timelog(savetime)values(now());
    insert into timeinfo(info)values'deleteact');
end
//
当用户对students表执行DELETE操作时,students数据库中的timelog数据表和timeinfo数据表中分别被插入操作时间和操作信息。

在MySQL中,一个表在相同的时间和相同的触发时间只能创建一个触发器,如触发时间INSERT,触发时间为AFTER的触发器只能有一个,但是可以定义BEFORE的触发器。

查看触发器

在MySQL中,可以执行SHOW TRIGGERS语句查看触发器的基本信息,其基本形式如下:

SHOW TRIGGERS;

在命令提示符中输入SHOW TRIGGERS语句即可查看选择数据库中的所有触发器,但是,应用该查看语句存在一定弊端,即只能查询所有触发器的内容,并不能指定查看某个触发器的信息。这样一来,就会在用户查找指定触发器信息的时候带来极大不便。故推荐只在触发器数量较少的情况下应用SHOW TRIGGERS语句查询触发器基本信息。

查看triggers表中触发器信息

在MySQL中,所有触发器的定义都存在该数据库的triggers表中。读者可以通过查询triggers表来查看数据库中所有触发器的详细信息。查询语句如下所示:

SELECT * FROM information_schema.triggers

其中,information_schema是MySQL中默认存在的库,而information_schema是数据库中用于记录触发器信息的数据表。通过SELECT语句查看触发器信息,如果用户想要查看某个指定触发器的内容,可以通过where子句应用TRIGGER字段作为查询条件。代码如下:

SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='触发器名称';

其中,“触发器名称”这一参数为用户指定要查看的触发器名称,和其他SELECT查询语句相同,该名称内容需要用一对“''”(单引号)引用指定的文字内容。

应用触发器

在MySQL中,触发器按以下顺序执行:BEFORE触发器、表操作、AFTER触发器操作。其中,表操作包括常用的数据库操作命令如INSERT、UPDATE、DELETE。

触发器中不能包含START TRANSCATION、COMMIT或ROLLBACK等关键词,也不能包含CALL语句。触发器执行非常严密,每一环都息息相关,任何错误都可能导致程序无法向下执行。由于已经更新过的数据表是不能回滚的,故在设计过程中一定要注意触发器的逻辑严密性。

删除触发器

在MySQL中,既然可以创建触发器,同样也可以通过命令删除触发器,即删除原来已经在某个数据库中创建的触发器,与MySQL中删除数据库的命令相似,删除触发器应用DROP关键字。其语法格式如下:

DROP TRIGGER 触发器名称

“触发器名称”参数为用户指定要删除的触发器名称,如果指定某个特定触发器名称,MySQL在执行过程中将会在当前库中查找触发器。

 

 

 

 

 

 

 

 

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
关系型数据库 MySQL
Mysql基础第二十八天,使用触发器
Mysql基础第二十八天,使用触发器
28 0
Mysql基础第二十八天,使用触发器
|
1月前
|
存储 SQL 关系型数据库
【MySQL 数据库】10、MySQL 的触发器
【MySQL 数据库】10、MySQL 的触发器
20 0
|
2月前
|
SQL 存储 关系型数据库
MySQL技能完整学习列表8、触发器、视图和事务——1、触发器(Triggers)的使用——2、视图(Views)的创建和使用——3、事务(Transactions)的管理
MySQL技能完整学习列表8、触发器、视图和事务——1、触发器(Triggers)的使用——2、视图(Views)的创建和使用——3、事务(Transactions)的管理
37 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL触发器 使用案例
MySQL触发器 使用案例
29 0
|
4月前
|
SQL 关系型数据库 MySQL
MySQL之如何使用触发器
MySQL之如何使用触发器
40 1
|
4月前
|
SQL 关系型数据库 MySQL
⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。
⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。
38 0
|
4月前
|
SQL 关系型数据库 MySQL
My Sql 触发器
My Sql 触发器
|
7月前
|
存储 SQL 关系型数据库
MySQL存储过程和触发器
MySQL存储过程和触发器
81 0
|
7月前
|
存储 关系型数据库 MySQL
使用MySQL视图与触发器
使用MySQL视图与触发器。
41 4
|
7月前
|
关系型数据库 MySQL 数据库
记录一下mysql触发器的一个小知识点
记录一下mysql触发器的一个小知识点
记录一下mysql触发器的一个小知识点