8. MySQL 触发器

目录

概述

        定义

        触发器特性:

基础操作

        创建触发器

NEW和OLD

其他操作

        查看触发器

        删除触发器

注意事项


概述

        定义

  • 触发器,就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据库表中的数据执行DML操作时自动触发这个SQL片段的执行,无需手动调用。
  • 在MySQL中,只有执行insert,delete,update操作时才能触发触发器的执行
  • 触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。
  • 使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发,
     

        触发器特性:

  • 1、什么条件会触发:l、D、U
  •  2、什么时候触发:在增删改前或者后
  • 3、触发频率:针对每一行执行
  • 4、触发器定义在表上,附着在表上

基础操作

        创建触发器

-- 需求1:当user表添加一行数据,则会自动在user_log添加日志
-- 定义触发器:trigger_test1
create trigger trigger_test1 after INSERT
on user for each ROW
insert into user_logs values (NULL,now(),'有新用户');

-- 在user表添加数据,让触发器自动执行
insert into user values (1,'张三','123456');


-- 需求1:当user表添加一行数据,则会自动在user_log添加日志
-- 定义触发器:trigger_test1
delimiter $$
create trigger trigger_test2 before UPDATE
on user for each ROW
begin 
insert into user_logs values (NULL,now(),'有用户信息被修改');
END $$
delimiter ;
-- 在user表添加数据,让触发器自动执行
update user set password = '3322332' where uid = 1;

NEW和OLD

-- INSERT类型的触发器

-- new
-- 定义触发器:trigger_test3
drop TRIGGER if exists trigger_test3
create trigger trigger_test3 after INSERT
on user for each ROW
insert into user_logs values(null,now(),concat('有新用户:',NEW.uid,NEW.username,NEW.password));

insert into user values(5,'赵六','123456');

-- update类型的触发器

-- old
drop TRIGGER if exists trigger_test4;
create trigger trigger_test4 after update
on user for each ROW
insert into user_logs values(null,now(),concat('用户信息被修改:',OLD.uid,OLD.username,OLD.password));

UPDATE USER SET PASSWORD = '56564565' WHERE UID = 5;


-- new 
drop TRIGGER if exists trigger_test5;
create trigger trigger_test5 after update
on user for each ROW
insert into user_logs values(null,now(),concat('用户信息被修改,修改之后为:',NEW.uid,NEW.username,NEW.password));

UPDATE USER SET PASSWORD = '56999565' WHERE UID = 5;


-- delete 类型触发器
-- OLD

drop TRIGGER if exists trigger_test6;
create trigger trigger_test6 after delete
on user for each ROW
insert into user_logs values(null,now(),concat('用户信息被删除:',OLD.uid,OLD.username,OLD.password));

delete from USER WHERE UID = 5;

其他操作

        查看触发器

        删除触发器

注意事项

  • MySQL中触发器中不能对本表进行insert、update、delete操作,以免递归循环触发
  • 尽量少使用触发器,假设触发器触发每次执行1s,insert table 500条数据,那么就需要触发500次触发器,光触发器执行的时间就花费了500s,而直接insert只需要1s,那么insert的效率就非常低了
  • 触发器是针对每一行的,对增删改非常频繁的表上,不要使用触发器,非常消耗资源
  • 了解一下,不建议用

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

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

相关文章

Serverless单体架构的崛起

在过去的几十年里,我们见证了应用架构以快速的速度演变。当我还是一个年轻的程序员时,开始编写一个简单的代码库,我们可以称之为单体应用。 我记得为前端编写了一些HTML/CSS,后端用了一些Java。但后来,随着时代发展和…

系统设计之Nginx

一、Nginx是什么 Nginx ("engine x") 是一个开源的,支持高性能、高并发的 Web 服务和代理服务软件。它是由俄罗斯人 Igor Sysoev 开发的,最初被应用在俄罗斯的大型网站 www.rambler.ru 上。后来作者将源代码以类 BSD 许可的形式开源出来供全球…

2023年山东省职业院校技能大赛信息安全管理与评估第一阶段样题

2023年山东省职业院校技能大赛信息安全管理与评估样题 竞赛需要完成三个阶段的任务,分别完成三个模块,总分共计 1000 分。三个模块内容和分值分别是: \1. 第一阶段:模块一 网络平台搭建与设备安全防护(240 分钟&…

Nginx负载均衡实战

🎵负载均衡组件 ngx_http_upstream_module https://nginx.org/en/docs/http/ngx_http_upstream_module.html upstream模块允许Nginx定义一组或多组节点服务器组,使用时可以通过多种方式去定义服务器组 样例: upstream backend {server back…

2023中国(海南)国际高尔夫旅游文化博览会 暨国际商界峰层·全球华人高尔夫精英巡回赛 全国颍商自贸港行盛大启幕

2023中国(海南)国际高尔夫旅游文化博览会(以下简称“海高博”)暨全国颍商走进海南自贸港于12月7-9日在海口观澜湖盛大开幕。该活动由中国国际贸易促进委员会海南省委员会、海南省旅游和文化广电体育厅主办,中国国际商会…

windows安装rabbitmq

注:安装 rabbitmq 之前需要先安装 erlang 语言包,否则安装过程会报错 erlang 语言包名称:otp_win64_25.3.2.3.exe。erlang 和 rabbitmq 有严格的版本对应。 部分版本对应: 安装 1、安装 erlang 并配置环境变量 1.1 双击 otp_…

在Deepin中安装x11vnc工具并结合内网穿透软件实现远程访问桌面

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 x11vnc是一种在Linux系统中实现远程桌面控制的工具,它的原理是通过X Window系统的协议来实现远程桌面的展…

007:vue实现与iframe实现页面数据通信

首页先搭建一个html页面和vue页面,在vue页面中,嵌入我们需要的iframe页面 文章目录 1. 搭建 html 页面和 vue 页面2. 实现 iframe 向 vue 页面通信3. 在实现 vue 向 iframe 页面通信 1. 搭建 html 页面和 vue 页面 暂定为 iframeDemo.html 和 vueDemo.v…

Linux中的SNAT与DNAT实践

Linux中的SNAT与DNAT实践 1、SNAT的介绍1.1,SNAT概述1.2,SNAT源地址转换过程1.3,SNAT转换 2、DNAT的介绍2.1,DNAT概述2.2,DNAT转换前提条件2.3,DNAT的转换 3、防火墙规则的备份和还原4、tcpdump抓包工具的运…

App 设计工具中的启动任务和输入参数

目录 创建 startupFcn 回调 定义输入 App 参数 可以使用 App 设计工具创建一个特殊函数,该函数在 App 启动时、但在用户与 UI 进行交互之前执行。此函数称为 startupFcn 回调,它非常适用于设置默认值、初始化变量或执行影响 App 初始状态的命令。例如&…

redis中使用事务保护数据完整性

事务是指一个执行过程,要么全部执行成功,要么失败什么都不改变。不会存在一部分成功一部分失败的情况,也就是事务的ACID四大特性(原子性、一致性、隔离性、持久性)。但是redis中的事务并不是严格意义上的事务&#xff…

使用Pytorch实现VGGNet(含VGGNet特征整理)

知识点整理 VGGNet 的主要特点: 采用3x3的小卷积核将模型提升到11-19层进一步提升了模型的泛化能力模型结构相对简洁 VGGNet主要解决了以下几个问题: 首先在当时的卷积神经网络中网络结构越深网络表现的性能越好,但同时也会带来较大的复杂…

IP地址定位技术为网络安全建设提供全新方案

随着互联网的普及和数字化进程的加速,网络安全问题日益引人关注。网络攻击、数据泄露、欺诈行为等安全威胁层出不穷,对个人隐私、企业机密和社会稳定构成严重威胁。在这样的背景下,IP地址定位技术应运而生,为网络安全建设提供了一…

CPU设计——Triumphcore——MP_work版本

该版本用作系统寄存器的实现,M/S/U状态的实现与切换,以及load/store的虚实地址转换 设计指标 2023.12.8 2023.12.9 不实现mideleg和medeleg,因此一旦出现异常,直接切换至M态, 调试记录 到存储区中取PTE要额外至少…

HNU计算机视觉作业三

前言 选修的是蔡mj老师的计算机视觉,上课还是不错的,但是OpenCV可能需要自己学才能完整把作业写出来。由于没有认真学,这门课最后混了80多分,所以下面作业解题过程均为自己写的,并不是标准答案,仅供参考 …

leetcode:643. 子数组最大平均数 I(滑动窗口)

一、题目 链接:643. 子数组最大平均数 I - 力扣(LeetCode) 函数原型: double findMaxAverage(int* nums, int numsSize, int k) 二、思路 滑动窗口: 先计算数组前k个元素总和,作为第一个窗口,默…

软件设计之组合模式

组合模式:将对象组合成树形结构。 案例:公司管理。一个公司可以分总公司和分公司,无论是总公司还是分公司都有自己的部门,如人力资源管理部门、财务部门。分公司可以建立自己在不同地域的办事处。请使用组合模式打印出某个公司的…

苹果笔记本网络恢复系统方法

1、开机时按下Option键,进行网络连接; 2、重新开机的同时然后按Command R键,Mac自动联网恢复并进入“MacOS X实用工具”; 3、进入“磁盘工具”; 4、在左边选择磁盘,选取“分区”标签,选择“分区…

dToF直方图之美_deadtime死区时间

上节在激光雷达多目标测距中有个问题为什么激光雷达不用做pile up算法,有人会有疑问,我看过很多人的简历,都把pile up量产校正算法写为最为自豪重要的算法攻坚,可能会吸引一波人的眼球。这要是在两三年前是值得被肯定的,但是如今随着dToF非常多量产项目落地,pile up研究不…

如何本地搭建开源分布式任务调度系统DolphinScheduler并远程访问

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问,结合内…