MySQL触发器使用指南大全

一、介绍

触发器是与表有关的数据库对象,指在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
BEGINUPDATE ordersSET last_update = NOW()WHERE id = NEW.id;
END;

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/128916.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yolov7添加pconv模块

连接pconv 1、复制到models-common.py文件最后 2、添加模块到yolo.py 3、修改网络,建议替换3x3的卷积,后面的参数不要了 4、不能替换步长为2的卷积

机器学习入门教学——交叉验证

1、简介 交叉验证是在机器学习建立模型和验证模型参数时常用的办法,一般被用于评估一个机器学习模型的表现。更多的情况下,我们也用交叉验证来进行模型选择。【注】在训练模型时,为了提高模型的质量,我们会将数据集划分为训练集、…

VTK实现裁剪删除模型功能

VTK高级裁剪删除模型功能 功能演示 删除框选面片 保护框选面片 功能介绍 纯VTK实现的高级裁剪删除功能,支持任意框选内容,支持以下功能: 鼠标任意框选面片范围,支持删除框内面片,或选择仅保留框内面片框选后可以…

K8S1.23.6版本详细安装教程以及错误解决方案(包括前置环境,使用部署工具kubeadm来引导集群)

准备工作(来自官方文档) 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存&#xf…

Git 提交时忽略某些文件

Git 提交时忽略某些文件 ①打开项目目录,找到.gitignore文件 ②编辑.gitignore文件,加上要忽略的文件后缀 以上是针对还没有提交过的文件进行过滤 如果已经这些后缀的文件已经提交过,则需要删除远程的该后缀文件 git rm --cached示例&…

Es6中的拓展运算符参数解构在实际项目当中应用

扩展操作符 … 是ES6中引入的,将可迭代对象展开到其单独的元素中,常见的应用场景有:拷贝数组对象,合并数组,参数传递,数组去重,字符串转字符数组,解构变量等 单纯的学习某个技术知识点,很容易的,但是能在实际项目中运用进去,那就不简单了的 单纯的学习某个语言的语法…

【LeetCode-简单题】69. x 的平方根

文章目录 题目方法一:二分查找 题目 方法一:二分查找 假设求8的平方根,那就设置left 0 ,right 8; 每次取最中间的元素的平方和8对比,如果大于8,则right mid-1,如果小于8 left mi…

python趣味编程-数独游戏

数独游戏是一个用Python编程语言编写的应用程序。该项目包含可以显示实际应用程序的基本功能。该项目可以让修读 IT 相关课程并希望开发简单应用程序的学生受益。这个Python 数独游戏是一个简单的项目,可用于学习tkinter库的实践。这个数独游戏可以提供Python编程的基本编码技…

JAVASE事件监听

代码: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner;import javax.swing.JButton; import javax.…

PowerBI - 匹配并从另一个表中获取值

我有 2 个表通过列 A 相互连接。我想将列 C 与列 A 匹配并获得列 B 的值。 DAX 函数是 LOOKUPVALUE . MatchedOutput LOOKUPVALUE(Table2[ColB],Table2[ColA],Table1[ColC])这将查找 Table2[ColB] 中的值哪里Table2[ColA]匹配 Table1[ColC] .

信息系统项目管理师(第四版)教材精读思维导图-第十三章项目资源管理

请参阅我的另一篇文章,综合介绍软考高项: 信息系统项目管理师(软考高项)备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 本章思维导图源文件 13.1 管理基础 13.2 管理过程 13.3 规划资源管理 13.4 估算活动资源 13.5…

[Qt]基础数据类型和信号槽

文章目录 1. Qt基本结构1.1 Qt本有项目1.1.1 项目文件(.pro)1.1.2 main.cpp1.1.3 mainwindow.ui1.1.4 mainwindow.h1.1.5 mainwindow.cpp 1.2 Qt中的窗口类1.2.1基础窗口类1.2.2 窗口的显示 1.3 内存回收 2. Qt中的基础数据类型2.1 基础类型2.2 log输出2…

爬虫系统的核心:如何创建高质量的HTML文件?

在网页抓取或爬虫系统中,HTML文件的创建是一项重要的任务。HTML文件是网页的基础,包含了网页的所有内容和结构。在爬虫系统中,我们需要生成一个HTML文件,以便于保存和处理网页的内容。 在这种情况下,可以使用Java函数…

Spring Boot深度解析:快速开发的秘密

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

C++初阶之模板深化讲解

模板深化讲解 非类型模板模板的特化1.函数模板特化2.类模板特化 模板分离编译1.什么是分离编译2.模板的分离编译 模板总结 非类型模板 非类型模板(Non-Type Template)是 C 中的一种模板形式,它允许你在模板中传递除了类型以外的其他值&#x…

Leetcode---361周赛

题目列表 2843. 统计对称整数的数目 2844. 生成特殊数字的最少操作 2845. 统计趣味子数组的数目 2846. 边权重均等查询 一、统计对称整数的数目 这题看一眼数据范围,直接就可以开始暴力求解了,按照题目要求模拟就行,代码如下 class Solu…

安装K8s基础环境软件(二)

所有节点执行 1、安装docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.reposudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin systemctl…

19 螺旋矩阵

螺旋矩阵 题解1 循环&#xff08;4个标志——根据顺时针&#xff09;题解2 方向 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 提示&#xff1a; - m matrix.length - n matrix[i].length - 1 < m, n <…

机器学习——boosting之提升树

提升树和adaboost基本流程是相似的 我看到提升树的时候&#xff0c;懵了 这…跟adaboost有啥区别&#xff1f;&#xff1f;&#xff1f; 直到看到有个up主说了&#xff0c;我才稍微懂 相当于&#xff0c;我在adaboost里的弱分类器&#xff0c;换成CART决策树就好了呗&#xff1…

欧科云链与HashKey Exchange达成合作,助力香港虚拟资产合规化

继8月10日 欧科云链 与 华为云 达成合作之后&#xff0c; 今天&#xff0c;欧科云链 又与 Hashkey Exchange 共同宣布正式达成合作&#xff01; 这次与Hashkey达成合作&#xff0c;双方又将在Web3行业中谱写怎样的故事&#xff1f; 9月6日&#xff0c;欧科云链控股有限公司&…