Mysql 触发器(复习)

news2024/12/29 14:01:46

今天考虑一个删除记录回收站的时候,突然想到了触发器这个东西,基本上之前也很少使用。废话不不多说,先看它的解释:

在MySQL中,触发器(Trigger)是一种特殊的存储过程,它会在指定的事件(例如插入、更新或删除数据)发生时自动执行。

触发器通常用于实现复杂的业务逻辑,例如在插入新数据时自动更新相关的记录、在删除数据时执行一些额外的清理操作等等。

MySQL中的触发器有两种类型:行级触发器和语句级触发器。行级触发器会在每一行数据受到影响时执行,而语句级触发器则会在每一次SQL语句执行完毕后执行一次。

看一个示例你就明白了:

 

CREATE TRIGGER log_deleted_user_menu_records AFTER UPDATE ON user_menu FOR EACH ROW
BEGIN
       --第一次判断
	IF
		OLD.deletestatus = 'NOT_DELETED' 
		AND NEW.deletestatus = 'USER_DELETED' THEN
			INSERT INTO deleted_records ( table_name, record_id, deleted_at, deletestatus )
		VALUES
			( 'user_menu', OLD.id, NOW(), 'USER_DELETED' );
		-- 第二个判断
		ELSEIF OLD.deletestatus = 'USER_DELETED' 
		AND NEW.deletestatus = 'TRASH_DELETED' THEN
			UPDATE deleted_records 
			SET deleted_at = NOW(),
			deletestatus = 'TRASH_DELETED' 
			WHERE
				table_name = 'user_menu' 
				AND record_id = OLD.id;
                        -- 最后走的判断
			ELSE UPDATE deleted_records 
			SET deleted_at = NOW(),
			deletestatus = 'DELETED' 
			WHERE
				table_name = 'user_menu' 
				AND record_id = OLD.id;
			
		END IF;
		
	END;

log_deleted_user_menu_records 触发器名称

AFTER UPDATE ON user_menu FOR EACH ROW 是指在user_menu表每一行发生变化后执行,(当然还可以在之前执行)

OLD.deletestatus 指user_menu字段中变化之前的deletestatus 值

NEW.deletestatus 那对应就是新值啦

其他语句一看就知道了,

然后测试一下,先看下面的user_menu表中id=3的一条记录,

此时deleted_records中是没有的,

下面我要改变id=3它的deletestatus值 了;

UPDATE test_database.user_menu SET deletestatus = ‘USER_DELETED’ WHERE id = 3

这个时候我们再来看记录表的数据;自动创建了一条记录,这就是触发器的作用;

然后再给小伙伴们说一下,触发器的注意事项

下面是触发器的优缺点和如何适当使用它们的一些注意事项:

优点:

  1. 数据完整性保障:触发器可以强制执行业务规则和数据完整性约束,例如强制某些列不允许为空、禁止插入重复数据等。
  2. 自动化操作:触发器可以自动执行一些操作,例如在插入、更新或删除数据时,同时更新其他表或列的值。
  3. 提高数据库性能:触发器可以减少应用程序对数据库的请求,从而减少网络延迟和服务器负载。

缺点:

  1. 难以维护:在大型数据库中,触发器可能会变得非常复杂,难以理解和维护。
  2. 降低性能:触发器的执行可能会降低数据库性能,特别是在处理大量数据时。
  3. 安全问题:触发器可能会被黑客利用,从而危及数据库的安全。

适当使用触发器需要注意以下几点:

  1. 仅在必要时使用触发器:在设计数据库时,应该仅在必要时使用触发器,以避免过多的复杂性和性能问题。
  2. 保持简单:尽量保持触发器的逻辑简单和易于维护。
  3. 测试和调试:在生产环境中使用触发器之前,应该对其进行彻底的测试和调试,以确保其正确性和稳定性。
  4. 安全性:在使用触发器时应该考虑安全问题,例如使用适当的安全措施来防止黑客利用触发器对数据库进行攻击。

总之,使用触发器可以提高数据完整性、自动化操作和提高数据库性能,但也需要注意其维护和性能问题,以及安全问题。

 

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

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

相关文章

[java/初学者]java常用API(2)——字符串

前言 所谓的字符串其实就是一串连续的字符,它是由许多单个字符连接而成的。如多个英文字母所组成的一个英文单词。字符串中可以包含任意字符,这些字符必须包含在一对双引号之内,例如“Dufeng”。 而与字符串相关的类都放在java.lang包中&…

Nuitka打包PyQt项目快速上手

之前用pyinstaller打包python程序,听说Nuitka比较快,用它打包PyQt的程序练练手。 Nuitka 问了问chatGPT,总结几点:将python编译成C/C,提高速率、跨平台、编译后程序直接运行(不需要python解释器&#xff0…

【云原生】Kubernetes集群升级

【云原生】Kubernetes集群升级指南 前言一、集群升级过程辅助命令二、升级master节点2.1、升级kubeadm。2.2、验证升级计划2.3、master节点升级 三、升级node节点总结 前言 本文演示kubernetes集群从v1.24.1升级到v1.25.5。 相关文档。 一、集群升级过程辅助命令 &#xff0…

linux系统中MongoDB数据库安装及分片集群搭建

史上最全的mongodb分片集群搭建,从介绍安装到集群搭建授权,你再也找不到比他更加详细的资料了,未经允许禁止转载!! 一、简介 MongoDB是一个便于开发和扩展设计的文档数据库,属于NoSQL数据库的一种。Mongo…

计算机笔试/面试常见逻辑题/智力题汇总

说明:按种类汇总,难度不分先后,做了分级罗列,方便后续扩充,大家有比较有意思的题目可以在讨论区讨论。 下面有的题题解相对复杂的直接参考了网上的一些解答,而有的题解我认为并不好的也做了补充&#xff0c…

2023年值得关注的3个品牌趋势,帮你弯道超车

2023年,大环境开放,压抑三年的消费蓄势待发,品牌如何唤醒消费者的、热情成了重中之重的大事。 春风和煦,万物生长。又到了各类品牌、各位营销人踌躇满志、斗志昂扬的时候了,浅析一下2023品牌宣传趋势,抓住…

OpenCV 图像处理学习手册:1~5

原文:Learning Image Processing with OpenCV 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,…

Redis删除键命令: 入门用del,老手用unlink,有何区别?

在Redis中,删除键是一项常见操作。Redis提供了两种删除键的方式:del和unlink。这两种方式看似类似,但实际上它们之间存在着不同之处。在本文中,我们将深入探讨这两种删除键的区别以及它们在实际应用中的使用。 一、del命令 del…

【OpenCV技能树】——二值图像处理

前言: 😊😊😊欢迎来到本博客😊😊😊 目前正在进行 OpenCV技能树的学习,OpenCV是学习图像处理理论知识比较好的一个途径,至少比看书本来得实在。本专栏文章主要记录学习Op…

SDUT操作系统课程(CATS)专题二+专题四(参考总结)

专题二+进程调度算法 RR q=1(含做题代码) 总结:到达时间一到对应进程进入,执行队首进程一次,对应的服务时间划一记号(推荐用正字),队首进程未执行到完成的话重新进入队尾,队首进程执行到完成的话出队,下一秒继续执行队首进程,当5个进程全部入队之后只要执行后两步操…

STM32-互补输出带死区和刹车断路笔记

互补输出带死区控制 比如说,高级控制定时器(TIM1 和 TIM8)可以输出两路互补信号,并管理输出的关断与接通瞬间。这段时间通常称为死区,由于硬件设备的延迟和一些设备转换的用时,这时候进行操作可能会导致比…

如何把Spring Boot的Jar包做成exe?生成自己的程序,超详细教程奉上

近期做了一个前后端合并的spring boot项目,但是要求达成exe文件,提供给不懂电脑的小白安装使用,就去研究了半天,踩了很多坑,写这篇文章,是想看到这篇文章的人,按照我的步骤走,能少踩…

神马转债,海顺转债,柳工转2,能辉转债上市价格预测

神马转债 基本信息 转债名称:神马转债,评级:AAA,发行规模:30.0亿元。 正股名称:神马股份,今日收盘价:7.83元,转股价格:8.38元。 当前转股价值 转债面值 / 转…

【cpolar 内网穿透】Openwrt 软路由实现内网穿透

cpolar 是一种安全的内网穿透云服务,它将内网下的本地服务器通过安全隧道暴露至公网。使得公网用户可以正常访问内网服务。 文章目录 前言一、上传 cpolar 安装包二、配置cpolar环境变量三、安装并配置 cpolar 服务3.1 安装 cpolar3.2 启动 cpolar3.3 进行其他配置 …

RabbitMQ (HelloWord 消息应答 持久化 不公平分发 预取值)

文章目录 HelloWord工作队列工作线程代码启动两个工作线程工作队列(生产者代码)工作队列(结果成功) 消息应答自动应答手动消息应答multiple的解释消息自动重新入队手动应答代码消息手动应答(生产者)消息手动…

网络编程之TCP

hi,大家好,今天为大家带来TCP协议的相关知识 这里写目录标题 认识TCP的相关方法实现TCP版本的回显服务器实现多线程版本的TCP回显服务器实现线程池版本的TCP回显服务器 认识TCP方法 认识TCP的相关方法 实现TCP版本的回显服务器 实现多线程版本的TCP回显服务器 实现线程池版…

尚硅谷大数据技术Hadoop教程-笔记06【Hadoop-生产调优手册】

视频地址:尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优) 尚硅谷大数据技术Hadoop教程-笔记01【大数据概论】尚硅谷大数据技术Hadoop教程-笔记02【Hadoop-入门】尚硅谷大数据技术Hadoop教程-笔记03【Hadoop-HDFS】尚硅谷大数据技术Ha…

轻松管理和保障容器应用程序:Docker Swarm安全之道

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 文章目录 一、 介绍Docker Swarm 安全1. 什么是Docker Swarm2. 为什么要使用Docker Swarm3. Docker Swarm的安全特性 二…

sql语法:详解DDL

Mysql版本:8.0.26 可视化客户端:sql yog 目录 一、DDL是什么?二、和数据库相关的DDL2.1 创建数据库2.2 删除数据库2.3 查看所有的数据库,当前用户登录后,可以看到哪些数据库2.4 查看某个数据库的详细定义2.5 修改数据库…

你一定能看懂的数据库事务和事务特性实现原理

一。概念 事务 是数据库执行原子操作的基本单位。一个事务中的多个修改,则要么全部成功执行,要么全部不执行。 关于事务的 MYSQL 官网的解释 Transactions are atomic units of work that can be *committed* or *rolled back*. When a transaction ma…