MySQL触发器使用指南大全

news/2024/7/7 22:59:56

一、介绍

触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。
使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发(比如说 一条语句影响了 5 行 则会被触发 5 次),不支持语句级触发(比如说 一条语句影响了 5 行 则会被触发 1 次)。

触发器类型NEW 和 OLD
INSERTNEW 表示将要或者已经新增的数据
UPDATEOLD表示修改之前的数据,NEW表示将要或已经修改后的数据
DELETEOLD表示将要或者已经删除的数据

 

二、触发器-语法
 

创建
CREATE TRIGGER trigger_name

BEFORE/AFTER INSERT/UPDATE/DELETEON

tbl_name FOR EACH ROW         --行级触发器BEGIN

BEGIN

        trigger_stmt ;

END;

查看
SHOW TRIGGERS ;


删除
DROP TRIGGER [schema_name]trigger_name; --如果没有指定schema_name,默认为当前数据库。
 

三、触发器-案例1(insert类型)

--插入数据触发器如下:
create trigger tb_user_insert_trigger
after insert on tb_user for each row

begin

insert into user_logs(id, operation,operate_time,operate_id,operate_params)VALUES(null, 'insert ', now(),new.id, concat( '插入的数据内容为: id=' , new.id , ' , name=' ,new.name) );

end;

--查看触发器

SHOW TRIGGERS ;

--删除触发器

DROP TRIGGER tb_user_insert_trigger

四、触发器-案例2(update类型)

--更新数据触发器如下:
create trigger tb_user_update_trigger
after update on tb_user for each row

begin

insert into user_logs(id, operation,operate_time,operate_id,operate_params)VALUES(null, 'update ', now(),new.id, concat('更新前的数据: id=' , old.id , ' , name=' ,old.name,'更新后的数据: id=' , new.id , ' , name=' ,new.name) );

end;

--查看触发器

SHOW TRIGGERS ;

--删除触发器

DROP TRIGGER tb_user_update_trigger

五、触发器-案例3(delete类型)

--删除数据触发器如下:
create trigger tb_user_delete_trigger
after deleteon tb_user for each row

begin

insert into user_logs(id, operation,operate_time,operate_id,operate_params)VALUES(null, 'delete', now(),old.id, concat('删除前的数据: id=' , old.id , ' , name=' ,old.name) );

end;

--查看触发器

SHOW TRIGGERS ;

--删除触发器

DROP TRIGGER tb_user_delete_trigger

六、触发器总结

MySQL触发器是在特定表上执行的存储过程,通常在插入、更新和删除数据时触发。触发器允许您在数据库操作前后执行自定义逻辑,例如验证数据的有效性、记录日志或更新其他相关表的数据。

创建MySQL触发器:

CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name
FOR EACH ROW
BEGIN
    -- 触发器逻辑
END;

触发器名称:您为触发器指定的唯一名称。
BEFORE / AFTER:指定触发器在操作之前或之后触发。
INSERT / UPDATE / DELETE:指定触发器在执行插入、更新或删除操作时触发。
table_name:触发器所属的表名。
FOR EACH ROW:表示触发器将为每个受影响的行执行一次。

在BEGIN和END之间编写触发器的逻辑。可以使用NEW关键字引用插入或更新的新值,使用OLD关键字引用更新或删除的旧值。

例如,以下示例是一个简单的触发器案例:

在每次插入新行到"orders"表时,自动更新"last_update"列为当前时间:

CREATE TRIGGER update_last_update
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
    UPDATE orders
    SET last_update = NOW()
    WHERE id = NEW.id;
END;

这只是一个简单的示例,实际上可以编写更复杂的触发器逻辑来满足您的需求。


http://lihuaxi.xjx100.cn/news/1533410.html

相关文章

DockerFile构建过程 实践

Dockerfile 1 DockerFile 构建过程 dockerfile是用来构建docker镜像文件!命令参数脚本 构建步骤 dockerfiledocker build 构建一个镜像docker run 运行镜像docker push 发布一个镜像 dockerhub官方的镜像,会对应到github上一个仓库中的Dockerfile …

AI伦理:科技发展中的人性之声

文章目录 AI伦理的关键问题1. 隐私问题2. 公平性问题3. 自主性问题4. 伦理教育问题 隐私问题的拓展分析数据收集和滥用隐私泄露和数据安全 公平性问题的拓展分析历史偏见和算法模型可解释性 自主性问题的拓展分析自主AI决策伦理框架 伦理教育的拓展分析伦理培训 结论 &#x1f…

黑马JVM总结(三)

(1)栈内存溢出 方法的递归调用,没有设置正确的结束条件,栈会有用完的一天,导致栈内存溢出 可以修改栈的大小: 再次运行:减少了次数 案例二: 两个类的循环应用问题,导致Js…

设计模式-享元模式(Flyweight)

文章目录 前言一、享元模式的概念二、 享元模式的结构三、享元模式的优缺点1、优点2、 缺点3、 适用场景: 三、 享元模式的实现总结 前言 享元模式(Flyweight Pattern)是一种结构型设计模式,它的主要目标是减少应用程序中对象的数…

JavaScript发展历程

目录 一、起源(1995-1997) 二、发展(1997-2005) 三、进化——Ajax与Web 2.0(2005-2010年) 四、移动互联网与现代化(2010年至今) 结论 JavaScript是一种广泛使用的网络编程语言&…

弃用http改用https的缘故,与密钥的使用,证书意义

为何弃用http协议 在十几年前,我们的传输协议是http协议,为何到了如今改成了https协议呢?为了安全的考虑。 在http协议中,我们的内容是透明的,不被保护的,在黑客等恶意分子的面前,信息极其任意…

玩转Mysql系列 - 第18篇:流程控制语句(高手进阶)

这是Mysql系列第18篇。 环境:mysql5.7.25,cmd命令中进行演示。 代码中被[]包含的表示可选,|符号分开的表示可选其一。 上一篇存储过程&自定义函数,对存储过程和自定义函数做了一个简单的介绍,但是如何能够写出复…

防火墙的设置主要是为了防范什么

防火墙的设置主要是为了防范网络攻击和数据泄露。随着互联网的普及和信息化的加速,网络安全问题越来越受到人们的关注。其中,防火墙是一种常见的网络安全设备,其设置的重要性也日益凸显。 防火墙的设置主要是为了防范什么 防火墙的设置主要目…