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 类型触发器
-- OLDdrop 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的效率就非常低了
  • 触发器是针对每一行的,对增删改非常频繁的表上,不要使用触发器,非常消耗资源
  • 了解一下,不建议用

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

访问NFS存储及自动挂载

本章主要介绍NFS客户端的使用 创建NFS服务器并通过NFS共享一个目录 在客户端上访问NFS共享的目录 自动挂载的配置和使用 1 访问NFS存储 前面介绍了本地存储,本章就来介绍如何使用网络上的存储设备。NFS即网络文件系统,所实现的是 Linux 和 Linux 之间的…

在springboot中引入参数校验

一、概要 一般我们判断前端传过来的参数&#xff0c;需要对某些值进行判断&#xff0c;是否满足条件。 而springboot相关的参数校验注解&#xff0c;可以解决我们这个问题。 二、快速开始 首先&#xff0c;我用的springboot版本是 3.1.5 引入参数校验相关依赖 <!--1…

Java - 线程间的通信方式

线程通信的方式 线程中通信是指多个线程之间通过某种机制进行协调和交互 线程通信主要可以分为三种方式&#xff0c;分别为共享内存、消息传递和管道流。每种方式有不同的方法来实现 共享内存&#xff1a;线程之间共享程序的公共状态&#xff0c;线程之间通过读-写内存中的公…

【ARM Coresight 系列 2 文章 -- Trace32 对 APBIC 地址的配置 介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 APBIC RomtableTrace32 RESBREAKTrace32 ENRESETAPBIC Romtable 图 1 APBIC 网络图 如上图所示,如果想通过Trace32/DS-5 去访问 AP, 这个时候需要怎么做呢?可以看到 APBIC 中ROMTABLE 中 APB-AP 的偏移是0x002000…

ECCV 2024 European Conference on Computer Vision

目录 DatesPeople 官网&#xff1a; https://eccv2024.ecva.net/ 链接 Dates Thursday, February 29, 2024 authors Abstract registration deadlineThursday, March 7, 2024 authors Submission deadlineThursday, March 14, 2024 authors Supplementary materials deadlineM…

数据驱动构建企业动态全面预算管理架构

在过去的20年里&#xff0c;电子表格一直是企业用于规划、预测、预算和管理报告的主要工具&#xff0c;尽管有的企业具备针对财务的系统&#xff0c;但其应用效率和规划技术仍然难以满足市场需求。并且&#xff0c;大部分企业对于财务管理的部署成本相对较低&#xff0c;其可访…

御剑工具学习

御剑 1.1 工具的下载路径1.2 工具的安装流程1.3 工具的详细使用 1.1 工具的下载路径 百度网盘 链接&#xff1a;https://pan.baidu.com/s/1Bn7GtWb7AStcjzVahFOjSQ 提取码&#xff1a;zkaq 1.2 工具的安装流程 御剑不用安装&#xff0c;直接下载下来解压&#xff0c;双击“御…

优化您的Mac电脑风扇控制体验 - 尝试Macs Fan Control Pro!

在日常使用Mac电脑过程中&#xff0c;我们经常会遇到电脑发热的问题&#xff0c;特别是在运行大型软件或进行高负载任务时。为了保护电脑硬件&#xff0c;一个高效且可靠的风扇控制软件是必不可少的。 Macs Fan Control Pro是一款专为Mac电脑设计的风扇控制软件&#xff0c;它…

SpringBoot自定义参数校验注解

为什么要自定义校验注解? 当现有的注解NotEmptyPatternNotNullURl等不能满足业务需求的时候,我们需要手动自定义一个注解 操作步骤 新建一个anno的包 单击右键添加注解 编写state注解 创建validation文件夹 编写校验规则 然后给上面的State注解指定这个校验规则 使用注解…

好用的网页内容转markdown工具

因为平时记录的笔记在不同的平台发布&#xff0c;后面需要保存成mrakdown的格式又找不到本地的文件记录&#xff0c;本地存储的好处很多&#xff0c;比如可以离线浏览阅读&#xff0c;对网页进行备份&#xff0c;也能借助其他工具同步数据而来满足自己的工作流程。这是这些工具…

【EI会议征稿】第三届电气、控制与信息技术国际学术会议(ECITech 2024)

第三届电气、控制与信息技术国际学术会议&#xff08;ECITech 2024&#xff09; 2024 3rd International Conference on Electrical, Control and Information Technology 继往届ECITech年度系列会议的成功举办&#xff0c;第三届电气、控制与信息技术国际学术会议&#xff08…

Vue-第七天

智慧商城项目&#xff1a; 1.创建项目选项&#xff1a; 2.调整&#xff1a; 主要是增加两个文件夹&#xff0c;删除倒是没什么 3.组件库&#xff08;vant-ui&#xff09;&#xff1a; 点击进入官网:Vant 2 - Mobile UI Components built on Vue 4.导入&#xff1a; 全部导入…