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 触发器名;
相关推荐
JosieBook28 分钟前
【数据库】时序数据库选型指南:在大数据与工业4.0时代,为何 Apache IoTDB 成为智慧之选?
大数据·数据库·时序数据库
程序员三明治29 分钟前
详解Redis锁误删、原子性难题及Redisson加锁底层原理、WatchDog续约机制
java·数据库·redis·分布式锁·redisson·watchdog·看门狗
chenzhou__38 分钟前
MYSQL学习笔记(个人)(第十五天)
linux·数据库·笔记·学习·mysql
一只自律的鸡2 小时前
【MySQL】第二章 基本的SELECT语句
数据库·mysql
liliangcsdn3 小时前
如何使用python创建和维护sqlite3数据库
数据库·sqlite
TDengine (老段)9 小时前
TDengine 数学函数 DEGRESS 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)9 小时前
TDengine 数学函数 GREATEST 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
安当加密9 小时前
云原生时代的数据库字段加密:在微服务与 Kubernetes 中实现合规与敏捷的统一
数据库·微服务·云原生
爱喝白开水a10 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
想ai抽10 小时前
深入starrocks-多列联合统计一致性探查与策略(YY一下)
java·数据库·数据仓库