MySQL触发器详解

今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL触发器相关知识。

一、触发器简介

触发器是一种特殊的存储过程,在定义触发器时会定义触发器的触发条件,使得触发器在满足触发条件时自动执行而不需要认为调用。尽管触发器的原理很简单,但是在MySQL中引入并使用触发器,可以实现很多实用的效果,并满足一些特定业务环境的需要。
触发器的作用主要有以下几点:
1、增强数据库的安全性。
可以实现对用户操作数据库的限制,比如不允许用户下班时间修改数据,不允许用户对某些数据更改超过一定的幅度和范围等等。
2、实现数据库操作的审计。
利用MySQL触发器,可以跟踪用户对数据库的操作,把用户执行的一些操作自动写入审计库。
3、定义数据表的一些复杂规则。
触发器可以实现非标准的数据完整性检查和约束,因此,触发器可以实现比规则更加复杂的限制。
4、实现复杂的级联操作。
尽管我们利用外键,可以实现相关的级联操作,但是,利用触发器,我们可以实现更加复杂的级联操作。
5、自动计算数值。
利用触发器,可以监控数据库中某些敏感值,例如,如果当前公司账目上可用资金少于100万元,则立即给公司老板告警等等。

二、触发器定义

触发器定义语法如下:

create trigger 【触发器名称】 【触发时机(before|after)】 【触发动作(delete|update|insert)on 【数据库表名】 for each row 
begin
【触发后执行事件】
end

在上述语法中,触发器名称可以自行定义,触发时机只可以选择bofore和after,before在触发动作之前执行,after在触发动作之后执行。触发后如果只有简单的一行SQL命令,则不需要加begin和end关键字,但是如果有多行命令,则需要添加相应的关键字。
此外,与MySQL存储过程类似,MySQL触发器也需要使用delimiter来修改MySQL数据库的默认分号结束符。

三、触发器示例

下面,我来创建一个简单的触发器,作用是当我们向student表中添加学生后,自动向logs表中记录刚才的添加操作,下面我们实际创建该触发器,并观察其效果。
创建触发器SQL命令如下:

create trigger student_add after insert on student for each row 
insert into logs select now(*),concat(id,'-',name) from student where id=(select max(id) from student );//

然后,我们向student表中插入学生数据,并观察效果如下:

显然,我们的触发器当向student表中添加数据时生效,并且达到了我们与其的效果。

四、触发器查看与删除

最后,我们来简单将以下触发器的查看和删除相关命令。
1、查看指定触发器
执行命令:

show create trigger 【触发器名】\G

可以查看指定的触发器。
上述命令执行结果如下:
MySQL触发器详解_第1张图片
2、查看所有触发器
执行命令:

show triggers\G

可以查看所有的触发器,执行结果如下:
MySQL触发器详解_第2张图片
3、删除触发器
执行命令

drop trigger 【触发器名】;

可以删除指定的触发器。执行效果如下:
MySQL触发器详解_第3张图片
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

你可能感兴趣的:(MySQL,mysql,数据库,database,MySQL触发器,运维DBA)