MySql的触发器

简介: 触发器是由事件来触发某个操作。这些事件包括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在执行过程中将会在当前库中查找触发器。

 

 

 

 

 

 

 

 

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
存储 安全 关系型数据库
2024 Mysql基础与进阶操作系列之MySQL触发器详解(21)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
MySQL触发器的使用场景之数据完整性约束、如何具体创建person的日志表、触发器与存储过程的对比与选择、触发器的性能和注意事项等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
存储 关系型数据库 MySQL
MySQL 中的触发器数量之谜
【8月更文挑战第31天】
405 0
|
SQL 数据采集 关系型数据库
|
存储 SQL 关系型数据库
(十四)全解MySQL之各方位事无巨细的剖析存储过程与触发器!
前面的MySQL系列章节中,一直在反复讲述MySQL一些偏理论、底层的知识,很少有涉及到实用技巧的分享,而在本章中则会阐述MySQL一个特别实用的功能,即MySQL的存储过程和触发器。
613 0
|
存储 SQL 数据库
MySQL设计规约问题之为什么要避免使用存储过程、触发器和函数
MySQL设计规约问题之为什么要避免使用存储过程、触发器和函数
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
存储 SQL 关系型数据库
MySQL周内训参照4、触发器-插入-修改-删除
MySQL周内训参照4、触发器-插入-修改-删除
220 1
|
存储 SQL 关系型数据库
MySQL存储过程_触发器_游标——Baidu Comate
MySQL存储过程_触发器_游标——Baidu Comate
275 0
|
SQL 存储 关系型数据库
MySQL的触发器创建与使用——使用Baidu Comate生成与触发测试完整过程
MySQL的触发器创建与使用——使用Baidu Comate生成与触发测试完整过程
270 0

热门文章

最新文章