MySQL触发器

前言

触发器(trigger)是由事件来触发某个操作,这些事件包括:insert语句、update语句、delete语句,当数据库系统执行这些事件时,就会激活执行相应的操作。

一、创建触发器

触发器是由insert、update和delete等事件来触发的某种特定的操作,满足触发器的触发条件时,数据库系统就会执行触发器中定义好的程序语句。这样做可以保证某些操作之间的一致性。

例如,当学生表中增加一个学生信息时,学生的总数就必须同时改变。这时可以创建一个触发器,每当增加一个学生记录时,就执行以此计算学生总数的操作。这样就可以保证每次增加学生的记录后,学生总数是与记录数一致的。触发器触发的执行语句可能是一个,也可能是多个。

1.1、创建只有一个语句的触发器

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

create teigger 触发器名

before | after 触发事件(在触发事件之前或之后)

on 表名(在那个表中)

for each row (行级语句触发)

执行语句

解释说明: 触发器名参数要创建的触发器的名字,before和after 参数指定了触发器执行的时间,"before"指在触发事件之前执行触发语句,"afore"表示在触发事件之后执行触发语句;"触发事件"参数指触发的条件,其中包括 insert、update、delete;"表名"参数指触发事件操作的表的名称;"for each row"表示任何一条记录上的操作满足触发事件都会触发该条件的触发器;"执行语句"参数指触发器触发后执行的程序。

sql 复制代码
-- 解释说明以下语句:执行触发器,在user执行插入操作之前,执行user_logs插入的值合并用户和密码写到user_logs的字段中
create trigger trigger_insert
after insert
on user
for each row
insert into user_logs values(null,now(),concat(new.username,new.password));

insert into user values(null,"admin","1234");

1.2、创建有多个语句的触发器

MySQL中,触发器触发的执行语句可能是多个,创建多个执行语句的触发器的基本形式:

create teigger 触发器名

before | after 触发事件(在触发事件之前或之后)

on 表名(在那个表中)

for each row (行级语句触发)

begin

执行语句列表

end

其中,begin end 直接的"执行语句列表"参数表示需要执行的多个执行语句的内容,不同的执行语句之间用分号隔开。

注: 一般情况下,MySQL默认是以;作为结束执行语句。在创建触发器过程中需要用到;。为了解决这一问题,可以用delimiter语句。如delimiter&&,可以将结束符号变成&&。当触发器创建完成后,可以用命令delimiter ;来将结束符号变为:;


二、查看触发器

查看触发器是指看数据库中已存在的触发器的定义、状态、语法等信息,查看触发器的方法包括show triggers;语句和information_schema;数据库下的triggers表等。

sql 复制代码
show triggers;
show triggers\G;-- 格式化显示触发器信息

select * from information_schema.triggers;
select * from information_schema.triggers\G;-- 格式化显示触发器信息,多用于触发器量大的查看操作

select * from information_schema.triggers where trigger_name='触发器名'\G;-- 单独查看触发器的名字定位查找

三、删除触发器

如果触发器名字已存在,或者对数据表的触发操作已存在,需要删除现有的触发器。

sql 复制代码
drop trigger 触发器名;
相关推荐
AI人工智能+电脑小能手6 小时前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
yyuuuzz6 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
键盘上的猫头鹰10 小时前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql
Royzst10 小时前
数据库知识点
数据库
雪的季节10 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt
宋浮檀s10 小时前
应急响应——Web漏洞:命令执行+SSRF+弱口令
运维·数据库·sql·网络安全·oracle·应急响应
yurenpai(27届找实习中)12 小时前
redis_点评(21.好友关注——关注、取关功能实现;共同关注功能实现)
数据库·redis·缓存
Rick199312 小时前
索引的排序和分组
数据库·mysql
爱莉希雅&&&12 小时前
zabbix快速搭建和使用
android·linux·数据库·zabbix·监控
JohnYan12 小时前
工作笔记 - PG分组极值
数据库·后端·postgresql