当前位置: 首页 > news >正文

⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述

触发器

  • ⑩⑥ 【MySQL】触发器详解
    • 1. 什么是触发器
    • 2. 触发器的使用
      • ①使用规则
      • ②案例


⑩⑥ 【MySQL】触发器详解


1. 什么是触发器

触发器

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

触发器类型

  • INSERT 触发器NEW 表示将要或已经新增的数据。
  • UPDATE 触发器OLD 表示修改之前的数据,NEW 表示将要或已经修改后的数据。
  • DELETE 触发器:OLD表示将要或已经删除的数据。



2. 触发器的使用

①使用规则

使用触发器

  • 🚀创建触发器

    • -- 语法:
      -- {}内的关键字为必选项,任选其一。
      -- BEFORE/AFTER表示触发SQL语句的时机,在新增/修改/删除操作之前/之后
      CREATE TRIGGER 触发器名
      {BEFORE | AFTER} {INSERT | UPDATE | DELETE}
      ON 表名 FOR EACH ROW
      BEGIN-- 触发后执行的SQL语句
      END;
      

  • 🚀查看触发器

    • SHOW TRIGGERS;
      

  • 🚀删除触发器

    • -- 若不指定schema_name,默认当前数据库
      DROP TRIGGER [schema_name.]触发器名
      



②案例

准备工作

  • 通过触发器记录 user 表的数据变更日志(user_logs) | 包含增加, 修改 , 删除

  • -- 需求: 通过触发器记录 user 表的数据变更日志(user_logs) , 包含增加, 修改 , 删除 ;-- 准备工作 : 日志表 user_logs
    create table user_logs(id int(11) not null auto_increment,operation varchar(20) not null comment '操作类型, insert/update/delete',operate_time datetime not null comment '操作时间',operate_id int(11) not null comment '操作的ID',operate_params varchar(500) comment '操作参数',primary key(`id`)
    )engine=innodb default charset=utf8;
    

INSERT触发器 案例

-- 插入数据触发器
DELIMITER $$CREATE TRIGGER tb_user_insert_trigger
AFTER INSERT 
ON tb_user FOR EACH ROW
BEGININSERT INTO user_logs(id, operation, operate_time, operate_id, operate_params) VALUES(NULL, 'insert', NOW(), new.id, CONCAT('插入的数据内容为: id=',new.id,',name=',new.name, ', phone=', NEW.phone, ', email=', NEW.email, ', profession=', NEW.profession));
END$$DELIMITER ;-- 查看触发器
SHOW TRIGGERS ;-- 插入数据到tb_user
INSERT INTO tb_user(id, NAME, phone, email, profession, age, gender, STATUS, createtime) VALUES 
(26,'三皇子','18809091212','erhuangzi@163.com','软件工程',23,'1','1',NOW());-- 查看触发器触发后的日志表
SELECT * FROM user_logs;-- 删除触发器
drop trigger tb_user_insert_trigger;

UPDATE触发器 案例

-- 修改数据触发器
DELIMITER $$CREATE TRIGGER tb_user_update_trigger
AFTER UPDATE 
ON tb_user FOR EACH ROW
BEGININSERT INTO user_logs(id, operation, operate_time, operate_id, operate_params) VALUES(NULL, 'update', NOW(), new.id,CONCAT('更新之前的数据: id=',old.id,',name=',old.name, ', phone=', old.phone, ', email=', old.email, ', profession=', old.profession,' | 更新之后的数据: id=',new.id,',name=',new.name, ', phone=', NEW.phone, ', email=', NEW.email, ', profession=', NEW.profession));
END$$DELIMITER ;-- 查看触发器
SHOW TRIGGERS ;-- 执行更新操作
UPDATE tb_user SET profession = '会计' WHERE id = 23;
UPDATE tb_user SET profession = '会计' WHERE id <= 5;-- 查看触发器触发后的日志表
SELECT * FROM user_logs;

DELETE触发器 案例

-- 删除数据触发器
DELIMITER $$CREATE TRIGGER tb_user_delete_trigger
AFTER DELETE 
ON tb_user FOR EACH ROW
BEGININSERT INTO user_logs(id, operation, operate_time, operate_id, operate_params) VALUES(NULL, 'delete', NOW(), old.id,CONCAT('删除之前的数据: id=',old.id,',name=',old.name, ', phone=', old.phone, ', email=', old.email, ', profession=', old.profession));
END$$DELIMITER ;-- 查看触发器
SHOW TRIGGERS ;




在这里插入图片描述

相关文章:

⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 触发器 ⑩⑥ 【MySQL】触发器详解1. 什么是触发…...

数据结构与算法编程题3

长度为n的顺序表&#xff0c;删除线性表所有值为x的元素&#xff0c;使得时间复杂度为O(n)&#xff0c;空间复杂度为O(1) #include <iostream> using namespace std;typedef int ElemType; #define Maxsize 100 #define OK 1 #define ERROR 0 typedef struct SqList {E…...

Go基础面经大全(持续补充中)

Go基础 1. 基础特性 Go的优势 天生支持并发&#xff0c;性能高。 单一的标准代码格式&#xff0c;比其他语言更具可读性。 自动垃圾收集机制比Java和Python更有效&#xff0c;因为它与程序同时执行。 Go数据类型 int, string, float, bool, array, slice, map, channel, p…...

uniapp heckbox-group实现多选

文章目录 html 代码JS 代码 混了业务逻辑&#xff0c;谨慎观看 html 代码 <view><!--可滚动视图区域。用于区域滚动 --><scroll-view :style"{ height: clientHeight px }" :scroll-top"scrollTop" scroll-y"true"scrolltouppe…...

读懂:“消费报销”模式新零售打法,适用连锁门店加盟的营销方案

读懂&#xff1a;“消费报销”模式新零售打法&#xff0c;适用连锁门店加盟的营销方案 引言&#xff1a;2023年的双十一已经落下帷幕&#xff0c;作为每年的经典电商促销节&#xff0c;今年已是第15个年头&#xff0c;但是今年各大电商平台却都是非常默契的&#xff0c;没有公布…...

一个基本的http客户端

高可用 客户端 1. httpClient.h #include <iostream> #include <string> #include <functional>class HttpClient { public:HttpClient(std::string url) : url_(url), port_(0) {}int write_http(const std::string &method, const std::string &…...

html-网站菜单-点击菜单展开相应的导航栏,加减号可切换

一、效果图 1.点击显示菜单栏&#xff0c;点击x号关闭&#xff1b; 2.点击一级菜单&#xff0c;展开显示二级&#xff0c;并且加号变为减号&#xff1b; 3.点击其他一级导航&#xff0c;自动收起展开的导航。 二、代码实现 <!DOCTYPE html> <html><head>&…...

2.FastRunner定时任务Celery+RabbitMQ

注意&#xff1a;celery版本和Python冲突问题 不能用高版本Python 用3.5以下&#xff0c;因为项目的celery用的django-celery 3.2.2 python3.7 async关键字 冲突版本 celery3.x方案一&#xff1a; celery3.xpython3.6方案二 &#xff1a; celery4.xpython3.7 解决celery执…...

vb.net 实时监控双门双向门禁控制板源代码

本示例使用设备介绍&#xff1a;实时网络双门双向门禁控制板可二次编程控制网络继电器远程开关-淘宝网 (taobao.com) Imports System.Net.Sockets Imports System.Net Imports System.Text Imports System.ThreadingImports System.Net.NetworkInformation Imports System.Man…...

文具办公产品展示预约小程序的作用如何

从整体来看&#xff0c;文具办公品牌/门店的生意来源于线下自然流量或线上自营商城/入驻第三方商城的的流量&#xff0c;线上多数情况都是以直接销售配送为主&#xff0c;但其实对文具品牌/门店而言还有信息展示、服务预约、在线咨询、产品介绍等需求。 虽然小区周边的消费者需…...

渗透测试流程是什么?7个步骤给你讲清楚!

在学习渗透测试之初&#xff0c;有必要先系统了解一下它的流程&#xff0c;静下心来阅读一下&#xff0c;树立一个全局观&#xff0c;一步一步去建设并完善自己的专业领域&#xff0c;最终实现从懵逼到牛逼的华丽转变。渗透测试是通过模拟恶意黑客的攻击方法&#xff0c;同时也…...

如何解决网站被攻击的问题:企业网络攻防的关键路径

在当今数字化时代&#xff0c;企业面临着不断升级的网络威胁&#xff0c;网站遭受攻击的风险也与日俱增。解决网站被攻击的问题对企业发展至关重要&#xff0c;不仅关系到企业的信息安全&#xff0c;也直接影响到企业的声誉和利益。从企业发展的角度出发&#xff0c;我们将探讨…...

大健康产业的先行者「完美公司」携手企企通,推进企业采购供应链数字化进程

随着中国经济持续向好&#xff0c;消费升级和美妆步骤增加&#xff0c;美妆和个人护理产品已逐渐成为中国消费者的日用消费品&#xff0c;推动了护肤品和化妆品的销售额增速均超过10%&#xff0c;成为中国整个快速消费品市场中的一颗亮眼明珠。 据国家统计局数据显示&#xff0…...

在windows Server安装Let‘s Encrypt的SSL证书

1、到官网&#xff08;https://certbot.eff.org/instructions?wswebproduct&oswindows&#xff09;下载 certbot客户端。 2、安装客户端&#xff08;全部默认安装即可&#xff09; 3、暂停IIS中的网站 开始菜单中找到并运行“Certbot”&#xff0c;输入指令&#xff1a; …...

GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(二)

GPT实战系列-如何使用P-Tuning本地化训练ChatGLM2等LLM模型&#xff1f;(二) 文章目录 GPT实战系列-1.训练参数配置传递2.训练前准备3.训练参数配置4.训练对象&#xff0c;seq2seq训练5.执行训练6.训练模型评估依赖数据集的预处理 P-Tuning v2 将 ChatGLM2-6B 模型需要微调的参…...

Python3.7+PyQt5 pyuic5将.ui文件转换为.py文件、Python读取配置文件、生成日志

1.实际开发项目时&#xff0c;是使用Qt Designer来设计UI界面&#xff0c;得到一个.ui的文件&#xff0c;然后利用PyQt5安装时自带的工具pyuic5将.ui文件转换为.py文件&#xff1a; pyuic5 -o mywindow.py mywindow.ui #先是py文件名&#xff0c;再是ui文件名样式图 QT5 UI&am…...

使用 VPN ,一定要知道的几个真相!

你们好&#xff0c;我的网工朋友。 今天想和你聊聊VPN。在VPN出现之前&#xff0c;企业分支之间的数据传输只能依靠现有物理网络&#xff08;例如Internet&#xff09;。 但由于Internet中存在多种不安全因素&#xff0c;报文容易被网络中的黑客窃取或篡改&#xff0c;最终造…...

数电实验-----实现74LS153芯片扩展为8选1时间选择器以及应用(Quartus II )

目录 一、74LS153芯片介绍 管脚图 功能表 二、4选1选择器扩展为8选1选择器 1.扩展原理 2.电路图连接&#xff08;Quartus II &#xff09; 3.仿真结果 三、8选1选择器的应用 1.三变量表决器 2.奇偶校验电路 一、74LS153芯片介绍 74ls153芯片是属于四选一选择器的芯片。…...

如何实现MATLAB与Simulink的数据交互

参考链接&#xff1a;如何实现MATLAB与Simulink的数据交互 MATLAB是一款强大的数学计算软件&#xff0c;Simulink则是一种基于模型的多域仿真平台&#xff0c;常用于工程和科学领域中的系统设计、控制设计和信号处理等方面。MATLAB和Simulink都是MathWorks公司的产品&#xff0…...

【数据结构】归并排序

​​ &#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你…...

从OpenAPI 3.1规范到实时交互式文档:ChatGPT驱动的API文档生成闭环体系(含性能压测数据对比)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;从OpenAPI 3.1规范到实时交互式文档&#xff1a;ChatGPT驱动的API文档生成闭环体系&#xff08;含性能压测数据对比&#xff09; OpenAPI 3.1 是首个原生支持 JSON Schema 2020-12 的 API 描述标准&#xff0c…...

图片去水印怎么做?2026年最全图片去水印工具推荐与方法盘点

在日常工作和生活中&#xff0c;我们常常会遇到带有水印的图片——无论是社交平台的截图、素材库的图片&#xff0c;还是从各类网站下载的资源。水印虽然保护了原作者的权益&#xff0c;但有时也会影响我们对内容本身的使用。那么&#xff0c;图片去水印有哪些实用方法&#xf…...

【Typescript】14-高级实战-设计类型安全的-api

高级实战&#xff1a;设计类型安全的 API 如果学完前面的知识&#xff0c;你还只是停留在“我会写几个类型、看得懂一些泛型”&#xff0c;那 TypeScript 其实只学了一半。真正拉开差距的地方&#xff0c;是你能不能把类型系统转化成设计能力&#xff0c;尤其是在 API 设计上。…...

ng-demos构建工具对比:Grunt vs Gulp在Angular项目中的实战应用

ng-demos构建工具对比&#xff1a;Grunt vs Gulp在Angular项目中的实战应用 【免费下载链接】ng-demos variety of angular demos 项目地址: https://gitcode.com/gh_mirrors/ng/ng-demos 在Angular项目开发中&#xff0c;构建工具的选择直接影响开发效率和项目维护性。…...

DeepSeek V2多模态支持真相(官方未公开的API隐藏能力全披露)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek V2多模态支持真相&#xff08;官方未公开的API隐藏能力全披露&#xff09; DeepSeek V2 官方文档明确声明为纯文本大模型&#xff0c;但逆向分析其生产环境 API 流量与响应头后发现&#xff1a;其底…...

毕业论文神器!2026年好用AI论文平台榜单,高质初稿轻松写

2026 年实测 10 款主流 AI 论文工具&#xff0c;千笔AI以全流程覆盖 语义级降重 免费查重领跑综合榜&#xff1b;ThouPen 稳坐留学生毕业全流程工具头把交椅&#xff1b;免费工具中DeepSeek Scholar、豆包学术版表现亮眼&#xff0c;30 分钟即可生成万字高质量初稿&#xff0…...

保姆级教程:在Ubuntu 22.04上从源码编译RISC-V SPIKE模拟器(含libboost报错解决)

从零构建RISC-V开发环境&#xff1a;Ubuntu 22.04下SPIKE模拟器深度编译指南 当第一次接触RISC-V生态时&#xff0c;搭建可靠的开发环境往往成为新手面临的第一个挑战。作为RISC-V官方推荐的指令集模拟器&#xff0c;SPIKE以其轻量级和准确性成为学习RISC-V架构的理想工具。本文…...

USACO历年青铜组真题解析 | 汇总

​欢迎大家订阅我的专栏&#xff1a;算法题解&#xff1a;C与Python实现&#xff01; 本专栏旨在帮助大家从基础到进阶 &#xff0c;逐步提升编程能力&#xff0c;助力信息学竞赛备战&#xff01; 专栏特色 1.经典算法练习&#xff1a;根据信息学竞赛大纲&#xff0c;精心挑选…...

微信聊天数据本地化:开源工具WeChatMsg的技术架构与数据主权实践

微信聊天数据本地化&#xff1a;开源工具WeChatMsg的技术架构与数据主权实践 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trendin…...

博客从 Ubuntu 16.04 迁移到 FreeBSD:成本减半,性能提升超 10 倍!

Bruno Croci 的网站迁移之旅Bruno Croci 正在为 2026 年柏林的开源硬件峰会做准备。他的博客在 Ubuntu 16.04 上运行了 10 年&#xff0c;于 2026 年 5 月 21 日&#xff0c;他将其迁移到了 FreeBSD。迁移动机&#xff1a;旧系统的安全隐患与成本考量这个博客在 Digital Ocean …...