MySQL进阶——触发器

目录

1介绍

2语法

3案例

3.1 insert插入数据类型

3.2 update修改数据类型

3.3 delete删除数据类型

 

4视图/存储过程/触发器—小结

1介绍

触发器是与表有关的数据库对象,指在insert/update/delete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作。

使用别名OLDNEW引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还 只支持行级触发(影响5行则触发5次),不支持语句级触发。

2语法

创建、查看、删除。

3案例

通过触发器记录 tb_user 表的数据变更日志,将变更日志插入到日志表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;

3.1 insert插入数据类型

(1)创建 插入数据类型 触发器

create trigger tb_user_insert_triggerafter insert on tb_user2 for each rowbegininsert 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;

(2)测试:插入数据到tb_user2,日志表user_logs也更新。

insert into tb_user2(id, name, phone, email, profession, age, gender, status, createtime)VALUES (25,'二皇子','18809091212','erhuangzi@163.com','软件工程',23,'1','1',now());

3.2 update修改数据类型

#更新数据 触发器

create trigger tb_user_update_triggerafter update on tb_user2 for each rowbegininsert into user_logs(id, operation, operate_time, operate_id, operate_params)VALUES(null, 'insert', 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;

测试修改:

update tb_user2 set profession='化学工程' where id = 8;

成功更新:

3.3 delete删除数据类型

删除数据,不会产生新的数据,所以删除数据显示的日志是删除的旧的数据信息:

#删除数据 触发器

create trigger tb_user_delete_triggerafter delete on tb_user2 for each rowbegininsert 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;show triggers ;

delete from tb_user2 where id = 25;

成功删除这个记录,且有删除数据的日志:

 

4视图/存储过程/触发器—小结

视图/存储过程/存储函数/触发器,这一类称为mysql数据库中的存储对象。

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

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

相关文章

【设计模式】【创建型5-5】【原型模式】

文章目录 原型模式代码示例 原型模式 代码使用:spring框架里 bean的作用域 用途,以原型为模板,源源不断的创建(克隆 clone)对象。当直接创建对象的代价比较大时,则采用这种模式。 代码示例 public class…

字节发布Depth Anything V2深度模型,比 Depth Anything V1 更精细的细节。

欢迎点击关注下方公众号并加入官方读者交流群,一个有趣有AI的AIGC公众号:关注AI、深度学习、计算机视觉、AIGC、Stable Diffusion、Sora等相关技术,欢迎一起交流学习💗~ 字节发布Depth Anything V2深度模型。比 Depth Anything V1…

idea使用maven打包报错GBK不可映射字符

方法一:设置环境变量 打开“控制面板” > “系统和安全” > “系统”。点击“高级系统设置”。在“系统属性”窗口中,点击“环境变量”。在“系统变量”部分,点击“新建”,创建一个新的变量: 变量名:…

4.任务调度

1.基本知识 2.任务的状态 FreeRTOS中任务共存在4种状态:Running 运行态 当任务处于实际运行状态称之为运行态,即CPU的使用权被这个任务占用(同一时间仅一个任务处于运行态)。Ready 就绪态 处于就绪态的任务是指那些能够运行&…

单片机学习记录

一,单片机及开发板介绍 1,基本介绍 单片机,英文Micro Controller Unit,简称MCU内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(…

MySQL——子查询和嵌套查询

where (计算出的值) 本质:在where语句中嵌套一个子查询语句 代码演示: -- 1. 查询数据库结构-1 的所有考试结果(学号,科目名称,成绩),降序排列-- 方式一:使…

前后端中的cookie和session

实际上,在大多数Web应用中,这个过程通常是自动处理的,不需要手动操作。以下是标准流程: 登录时:当用户成功登录后,服务器会创建一个新的Session(如果之前还没有的话),并生…

CF训练1

1985E 看完题目之后 , 第一想法是最暴力的On3 , 对于每个i ,j ,k , 如果它们符合k的体积的话,我们就可以把这个长方体一格一格的移动 , 对于x方向 , 我们一共能移动a - i次 &#x…

1.x86游戏实战-认识CE

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提取码:6tw3 复…

Day5:有效的字母异位词 242 两个数组的交集 349 快乐数 202 两数之和1

题目242. 有效的字母异位词 - 力扣(LeetCode) class Solution { public:bool isAnagram(string s, string t) {//把数组当成哈希表,用两个数组来存储取模后的字母对应的数量//26个字母, 模25 0~25int arrs[26];int arrt[26];for(…

Python数据分析第一课:Anaconda的安装使用

Python数据分析第一课:Anaconda的安装使用 1.Anaconda是什么? Anaconda是一个便捷的获取包,并且对包和环境进行管理的虚拟环境工具,Anaconda包括了conda、Python在内的超过180多个包和依赖项 简单来说,Anaconda是包管理器和环境…

前端实战:实现块级元素的拖拽与缩放功能

在现代网页开发中,用户交互是一个非常重要的部分。在这篇文章中,我们将详细介绍如何使用原生 JavaScript 实现块级元素的拖拽与缩放功能。具体来说,我们将实现以下功能: 点击并拖动 outer 元素,可以移动整个块。点击并…

React学习路线

React基础 React 是一个用于构建用户界面的 JavaScript 库。它起源于 Facebook 的内部项目,现在已经成为前端社区中最受欢迎和广泛使用的库之一。以下是 React 的基础知识和核心概念: 1. JSX JSX 是 JavaScript XML 的缩写,是一种在 React…

C语言学习记录20240626

飞船无论朝哪边行驶,都能通过结构体记录获取它的初始坐标、转向角度和在该方向行进的距离,需要根据这些信息计算飞船移动后的坐标。 向量(vector)指具有大小(magnitude)和方向(direction)的量,可以理解为有方向的线段。 标量或纯量(scalar)指…

【嵌入式 RT-Thread】一种优雅的使用 [互斥锁] 和 [信号量] 解决数据多路并发思路

rt-thread 中的信号量和互斥锁在工业开发项目中的应用,本博文主要介绍了一种优雅的使用 [互斥锁] 和 [信号量] 解决数据多路并发思路 2024-06 by 积跬步、至千里 目录 0. 个人简介 && 授权须知1. 工业场景描述1.1 工业数据采集需求1.2 总线协议与数据采集 2…

汇聚荣做拼多多运营,是新手怎么做?

作为电商领域的一颗新星,拼多多以其独特的商业模式迅速崛起,吸引了众多商家和消费者的目光。对于新手来说,如何在拼多多平台上开展运营活动,成为了许多初入电商领域的人们关心的问题。本文将围绕如何做好拼多多运营这一核心内容&a…

DataGrip 2024 po for Mac 数据库管理工具解

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件(适合自己的M芯片版或Intel芯片版),将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功3、打开访达,点击【文…

基于Springboot+Vue的校友社交系统(带1w+文档)

基于SpringbootVue的校友社交系统(带1w文档) 校友社交系统作为一种典型的管理系统也迅速的发展并深入人们的日常生活中,它使用户足不出户就可以管理自己的校友社交信息等,最大化减缩了用户的管理时间,提高了管理效率。 项目简介 基于SSMVUE的…

【小学期】操纵数据的DAO设计——以学生管理系统为例

项目结构 student_management │ ├── src │ ├── model │ │ ├── Student.java │ │ └── StudentDAO.java │ │ │ ├── view │ │ └── StudentView.java │ │ │ ├── controller │ │ └── StudentController.java │…

基于百度地图实现矩形绘制/电子围栏/自定义覆盖物选择、点击、区域选中、轨迹绘制

目录 开发前的准备账号注册页面创建地图初始化矩形绘制开启绘制模式监听绘制完成事件矩形取消事件自定义覆盖物渲染数据准备覆盖物渲染自定义点击事件优化用户刷新提供的覆盖物添加右键菜单轨迹绘制开发前的准备 账号注册 百度地图开发者平台点此访问 登录注册后点击右上角的控…