⑩⑥ 【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
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, ', 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
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, ', 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
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, ', phone=', old.phone, ', email=', old.email, ', profession=', old.profession));
END$$

DELIMITER ;

-- 查看触发器
SHOW TRIGGERS ;




在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在前端开发中,什么是CDN(Content Delivery Network)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于金鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

牛客网刷题笔记三 寻找第K大+两数之和+合并两个排序的链表+用两个栈实现队列

算法题牛客网NC88 寻找第K大 题目&#xff1a; 思路就是做个排序&#xff0c;要求时间复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)&#xff0c;因此选用快排。代码&#xff1a; class Solution:def quickSort(self, a, start, end):if start > end:returnval a[start]…

测试老鸟总结,Web/APP与接口测试测试流程总结,避背黑锅...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、web测试流程 …

集合框架面试题

一、集合容器的概述 1. 什么是集合 集合框架&#xff1a;用于存储数据的容器。 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。 任何集合框架都包含三大块内容&#xff1a; 对外的接口、接口的实现和对集合运算的算 法。 接口&#xff1a;表示集合的抽象数据…

量化交易:借助talib使用技术分析指标

什么是技术分析&#xff1f; 所谓股票的技术分析&#xff0c;是相对于基本面分析而言的。基本分析法着重于对一般经济情况以及各个公司的经营管理状况、行业动态等因素进行分析&#xff0c;以此来研究股票的价值&#xff0c;衡量股价的高低。而技术分析则是透过图表或技术指标…

低代码在ERP中的理解与应用:提升开发效率与业务灵活性

企业资源规划&#xff08;ERP&#xff09;指通过融合不同部门的信息和流程&#xff0c;提升企业效率、融洽运营的管理体系。ERP系统通过提供一套集成化应用程序&#xff0c;助力企业管理工作流程&#xff0c;包含选购、库存、销售、生产规划等。 低代码&#xff08;Low-Code&a…

网页视频下载工具 iTubeGo mac中文版软件特色

iTubeGo YouTube Downloader mac是一款功能强大的YouTube视频下载工具。 iTubeGo YouTube Downloader mac软件特色 多种格式支持&#xff1a;iTubeGo YouTube Downloader可以将YouTube视频下载为多种常见的视频和音频格式&#xff0c;包括MP4、MP3、AVI、FLV、MOV、WMV等&…

基于猕猴Spike运动解码的不同解码方法性能对比

公开数据集中文版详细描述 参考前文&#xff1a;https://editor.csdn.net/md/?not_checkout1&spm1011.2124.3001.6192神经元Spike信号分析 参考前文&#xff1a;https://blog.csdn.net/qq_43811536/article/details/134359566?spm1001.2014.3001.5501神经元运动调制分析 …

心怀祖国放眼世界 爱国人士华国中应邀参加美国旧金山2023(APEC)峰会

据相关媒体美国旧金山报道:2023亚太经合组织&#xff08;APEC&#xff09;领导人非正式会议将于11月15日至17日在美国旧金山召开。11月11日&#xff0c;本年度APEC高级财政官员和部长会晤在旧金山率先启动&#xff0c;APEC CEO峰会将于11月14日至16日开幕。著名爱国人士、亚太一…

HR人才测评,提高招聘效率降低用人风险

随着社会的不断进步&#xff0c;越来越多的企业在人力资源管理中&#xff0c;引入人才测评工具。人才是构成一个企业的基础&#xff0c;是企业不断发展的保障&#xff0c;同时&#xff0c;人才也是一个企业的核心竞争力之一。所以&#xff0c;人才的素质对一个企业至关重要。现…

CICD 持续集成与持续交付(2)

目录 gitlab 部署 jenkins 部署 配置 实时触发 自动化构建docker镜像 通过ssh插件交付任务 添加jenkins节点 RBAC pipeline jenkins结合ansible参数化构建 安装ansible 新建gitlab项目 jenkins新建项目playbook gitlab 部署 虚拟机最小需求&#xff1a;4G内存 4核cpu 下载&…

MySQL锁

概述 介绍 锁是计算机协调多个进程或线程并发访问某一资源的机制&#xff0c;在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、IO&#xff09;的争用除外&#xff0c;数据也是一种供许多用户共享的资源。保证数据并发访问的一致性、有效性是所有数据库必须解决的一个…

Halcon (4):如何开始自学

文章目录 文章专栏前言Halcon文档Halcon基础案例文档英语阅读建议 结论 文章专栏 Halcon开发 前言 在我完成上一篇代码&#xff0c;halcon基础窗口事件写完了之后&#xff0c;我已经基本掌握了如何写一个简单的halcon程序。后面我学习新的知识的时候感觉遇到了瓶颈。因为网上没…

pom.xml格式化快捷键

在软件开发和编程领域&#xff0c;"格式化"通常指的是将代码按照一定的规范和风格进行排列&#xff0c;以提高代码的可读性和维护性。格式化代码有助于使代码结构清晰、统一&#xff0c;并符合特定的编码规范。 格式化可以包括以下方面&#xff1a; 缩进&#xff1a…

直流电机干扰的产生-EMC和EMI

直流电机干扰的产生-EMC和EMI 干扰的产生电路滤波处理EMC处理措施 干扰的产生 带电刷的电动机&#xff0c;由于在电刷切换时&#xff0c;电动机线圈中的电流不能突变&#xff0c;当一路线圈通电断开时&#xff0c;会在该线圈的两端产生较高的反电动势&#xff0c;这个电动势会…

MongoDB随记

MongoDB 1、简单介绍2、基本术语3、shard分片概述背景架构路由功能chunk&#xff08;数据分片&#xff09;shard key&#xff08;分片键值&#xff09; 4、常用命令 1、简单介绍 MongoDB是一个分布式文件存储的数据库&#xff0c;介于关系数据库和非关系数据库之间&#xff0c…

『亚马逊云科技产品测评』活动征文|借助AWS EC2搭建服务器群组运维系统Zabbix+spug

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 本文基于以下软硬件工具&#xff1a; aws ec2 frp-0.52.3 zabbix 6…

Typecho框架漏洞

这里说的框架漏洞只适用于1.2.0版本及以下的版本 这里说的漏洞是xss漏洞&#xff0c;学过渗透的应该都学过&#xff0c;我在这里就不过多阐述了&#xff0c;下面我们直接进入正题 直接在这个地方插入网址&#xff0c;后面再接上html代码即可&#xff0c;代码如下&#xff1a; …

『力扣刷题本』:二叉树的中序遍历

一、题目 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root [1…