MySQL触发器使用指南大全

news2024/11/23 22:40:13

一、介绍

触发器是与表有关的数据库对象,指在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://www.coloradmin.cn/o/994233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【操作系统实验】进程管理与内存分配模拟程序-含可运行有界面的Python代码

本文是博主之前做的操作系统实验,现在将完整代码和效果图免费放在下面,供大家参考,如果觉得有用,希望大家可以三连关注支持!!!!!! 实验目的 设计编写OS进程…

15. 线性代数 - 克拉默法则

文章目录 克拉默法则矩阵运算Hi,大家好。我是茶桁。 上节课我们在最后提到了一个概念「克拉默法则」,本节课,我们就来看看到底什么是克拉默法则。 克拉默法则 之前的课程我们一直在强调,矩阵是线性方程组抽象的来的。那么既然我们抽象出来了,有没有一种比较好的办法高效…

合宙Air724UG LuatOS-Air LVGL API控件-二维码(Qrcode)

二维码(Qrcode) 示例代码 qrcodelvgl.qrcode_create(lvgl.scr_act(),nil)lvgl.qrcode_set_txt(qrcode,"https://doc.openluat.com/home")lvgl.obj_set_size(qrcode,400,400)lvgl.obj_align(qrcode, nil, lvgl.ALIGN_CENTER, 0, 0)创建 可以通…

496. 下一个更大元素 I

class Solution { public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {// 存储numx2右侧第一个比它的元素数值std::unordered_map<int, int> index;std::stack<int> sta;for (int i nums2.size()-1; i &…

uniapp项目实践总结(十四)封装存储和路由方法

导语&#xff1a;在日常 APP 开发过程中&#xff0c;经常要用到数据的存储、获取和删除等操作以及页面导航之间的跳转&#xff0c;为此&#xff0c;封装了一个两个简单的方法来统一调用。 目录 原理分析方法实现实战演练案例展示 原理分析 主要是以下 API。 uni.setStorage…

xcode iOS 在app文件中开启访问 Document Directory

xcode iOS 在app文件中开启访问 Document Directory 在 Plist 中设置 LSSupportsOpeningDocumentsInPlace为 YES 且UIFileSharingEnabled为 YES &#xff08;这个不添加好像也可以&#xff09; 可以从系统的Files应用中访问应用的 Documents 目录 电脑 助手也可以访问 开…

视频号挂公众号链接最新教程方法,赶紧来看

玩视频号的朋友&#xff0c;尤其是靠挂公众号引流的朋友&#xff0c;肯定心里非常清楚&#xff0c;就在八月初&#xff0c;视频号放大招了&#xff0c;可以说这个大招是完全把公众号的路给堵死了&#xff0c;视频号出了什么新规呢&#xff0c;大家来看看。 第一个规则是&#…

无涯教程-JavaScript - IMTAN函数

描述 IMTAN函数以x yi或x yj文本格式返回复数的切线。复数的切线由以下公式计算- tan(z)正弦(z)/cos(z) 语法 IMTAN (inumber)争论 Argument描述Required/OptionalInumberA complex number for which you want the tangent.Required Notes Excel中的复数仅存储为文本。…

最新keil安装出现的无数问题记录及解决办法

报错问题现象如下&#xff1a; *** Target Target 1 uses ARM-Compiler Default Compiler Version 5 which is not available. 安装最新keil 5 出现无数个问题。 我使用GD32去跑&#xff0c;或者STM32去跑&#xff0c;都是这个问题。 一、我先解决了GD32的问题&#xff1a;…

阻塞队列学习总结

ArrayBlockingQueue&#xff1a;一个由数组结构组成的有界阻塞队列。 LinkedBlockingQueue&#xff1a;一个由链表结构组成的有界阻塞队列。 PriorityBlockingQueue&#xff1a;一个支持优先级排序的无界阻塞队列。 DelayQueue&#xff1a;一个使用优先级队列实现的延迟无界…

分库分表实战

数据分片与分片算法 分库分表的第一性原理&#xff0c;那就是&#xff1a;存储容量和性能容量。只有对核心业务表才会精心进行分库分表的设计。 首先我们了解一下数据分片是什么意思&#xff1f; 本质上的分库分表不就是数据分片吗&#xff1f;定义就是&#xff1a;按照某个…

BBR 带宽估计的延后累加

一个关于时延统计分布的小测试&#xff0c;用 netem delay jitter distribution pareto 模拟&#xff0c;得到下面的结果&#xff1a; netem 的 jitter 并不是真 jitter&#xff0c;只是通过延时阻滞部分报文模拟 jitter&#xff0c;对保序流而言&#xff0c;就表现为乱序&am…

搭建自己的OCR服务,第一步:选择合适的开源OCR项目

一、OCR是什么&#xff1f; 光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;是指对文本资料的图像文件进行分析识别处理&#xff0c;获取文字及版面信息的过程。 亦即将图像中的文字进行识别&#xff0c;并以文本的形式返回。 二、OCR的基本流程 1…

Science子刊 | 将CAR-T细胞疗法与造血干细胞移植相结合 或许 能治疗所有血液癌症...

来源&#xff1a;BRUNO DELESSARD/CHALLENGES-REA/REDUX 新的CAR-T细胞疗法有望能治疗几乎所有血液癌症。目前&#xff0c;该疗法已被批准用于五种亚型的血液癌症。宾夕法尼亚大学帕尔曼医学院的科学家们在预临床试验中展示了这种方法的潜在效能。 2023年8月31日&#xff0c;发…

动态路由的主流算法

路由器就是一台网络设备&#xff0c;它有多张网卡。当一个入口的网络包送到路由器时&#xff0c;它会根据一个本地的转发信息库&#xff0c;来决定如何正确地转发流量。这个转发信息库通常被称为路由表。 一张路由表中会有多条路由规则。每一条规则至少包含这三项信息。 目的…

vscode 调试 ROS2

1、在下列目录同层级找到.vscode文件夹 . ├── build ├── install ├── log └── src 2、 安装ros插件 3、创建tasks.json文件&#xff0c;添加下列内容 //代替命令行进行编译 {"version": "2.0.0","tasks": [{"label": &…

一窥未来:PyQt5引领下一代Python GUI开发

PyQt5 是一个用于创建图形用户界面&#xff08;GUI&#xff09;的强大工具包&#xff0c;它基于 Qt 库&#xff0c;为 Python 提供了丰富的 GUI 开发能力。无论是初学者还是有经验的开发者&#xff0c;都可以通过本文深入了解如何使用 PyQt5 来构建各种各样的界面应用程序。本文…

CUDA说明和安装[window]

文章目录 1、查看版本信息查看GPU查看cuda版本其他方法 2区分 了解cudaCUDA ToolkitNVCCcuDNN 3/ 安装过程4/版本的问题CUDA Toolkit和 显卡驱动 的版本对应CUDA / CUDA Toolkit和cuDNN的版本对应 5/关于CUDA和Cudnn**5.1 CUDA的命名规则****5.2 如何查看自己所安装的CUDA的版本…

力扣接雨水(解析)

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] …

lv4 嵌入式开发-2 Linux文件IO

1 文件的打开 1.1 标准I/O - 打开文件 下列函数可用于打开一个标准I/O流&#xff1a; FILE *fopen (const char *path, const char *mode);成功时返回流指针&#xff1b;出错时返回NULL标准I/O – fopen – mode参数 示例 #include <stdio.h> int main(int argc, ch…