【MySQL 数据库】10、MySQL 的触发器

news2025/1/24 11:35:38

MySQL 的触发器

  • 零、存储函数
  • 一、触发器
  • 二、触发器的使用和语法

零、存储函数

  • 存储函数是有返回值的存储过程
  • 存储函数的参数只能是 IN 类型

在这里插入图片描述

characteristic 说明:
① DETERMINISTIC:相同的输入参数总是产生相同的结果
② NO SQL :不包含 SQL 语句
③ READS SQL DATA:包含读取数据的语句,不包含写入数据的语句


🌼 用存储函数求 1~n 的累加和

# 输入参数不能写【in】,会报错
# create function sum_func(in n int) # 会报错
create function sum_func(n int) # RIGHT
returns int DETERMINISTIC
begin
	declare sum int default 0;
	
	while(n > 0) do
	 set sum := sum + n;
	 set n := n - 1;
 end while;
 
 return sum;
end;

# 调用存储函数
select sum_func(100);

一、触发器

  • 触发器是与表有关的数据库对象,指在 insert/update/delete 之前 (BEFORE) 或之后 (AFTER),触发并执行触发器中定义的 SQL 语句集合
  • 触发器的这种特性可以协助应用在数据库端确保数据的完整性日志记录数据校验等操作
  • 使用别名 OLDNEW 可引用触发器中发生变化的记录
  • 现在触发器还只支持行级触发,不支持语句级触发

在这里插入图片描述

二、触发器的使用和语法

在这里插入图片描述


🍀 通过触发器记录 tb_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 触发器:

# 创建触发器(insert)
create trigger tb_user_insert_trigger 
after insert on tb_user for each row
begin
	insert into user_logs values (null, 'insert', now(), new.id, concat(new.id, '_,_', new.name, '_,_', new.email));
end;

# 查看触发器
show triggers;

select * from user_logs;

insert into tb_user values (null, '陈铭酒', '19111658988', '3656585555@qq.com', '医学', 25, '男', 6, now());

update触发器:

# 查看触发器
show triggers;  

drop trigger tb_user_update_trigger;
# 创建触发器(update)
create trigger tb_user_update_trigger 
after update on tb_user for each row
begin
	insert into user_logs values (null, 'update', now(), new.id, concat('前: profession=', old.profession, 
	' 后:', 'profession=', new.profession));
end;

update tb_user set profession = '肿瘤学' where `name` = '陈铭酒';

update tb_user set profession = '母猪产后护理' where id >= 20;

delete 触发器:

# 创建触发器(delete)
create trigger tb_user_delete_trigger 
after delete on tb_user for each row
begin
	insert into user_logs values (null, 'delete', now(), old.id, concat('被删除: name=', old.name));
end;

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

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

相关文章

【PCB专题】案例:绕等长怎么直接以颜色区分看出是否绕好

PCB上对于时序的处理,在板卡上实际我们是通过绕等长的手段。做为一个合格的Layout工程师,等长的处理是不可或缺的技能。 一般来说,在绕等长的时候我们可以使用Delay Tune命令来改变走线的长度,然后通过规则管理器中分析看看哪根线长哪根线短。 但是在实际工作中,很可能绕着…

【AI绘画】为小白准备的最简单本地部署安装使用教程——webui启动器

什么是AI绘画? ai绘画,也叫“ai作画”、“人工智能绘画”,即通过 AI 生成技术得到画作或图片。ai作画由来已久,有许多创作ai绘画作品的方式,包括基于规则的图像生成算法、深度学习算法。最近火爆全网的是通过文本描述…

悟道3.0全面开源!LeCun VS Max 智源大会最新演讲

夕小瑶科技说 原创 作者 | 小戏 2023 年智源大会如期召开! 这场汇集了 Geoffery Hinton、Yann LeCun、姚期智、Joseph Sifakis、Sam Altman、Russell 等一众几乎是 AI 领域学界业界“半壁江山”的大佬们的学术盛会,聚焦 AI 领域的前沿问题&#xff0c…

【EasyX】实时时钟

目录 实时时钟1. 绘制静态秒针2. 秒针的转动3. 根据实际时间转动4. 添加时针和分针5. 添加表盘刻度 实时时钟 本博客介绍利用EasyX实现一个实时钟表的小程序,同时学习时间函数的使用。 本文源码可从github获取 1. 绘制静态秒针 第一步定义钟表的中心坐标center&a…

使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓

使用Python绘制粽子消消乐,素描图(优化版,正常/漫画/写实风格),词云图,字符画图及提取轮廓 1. 效果图2. 源码2.1 素描图源码2.2 [优化版:制作不同风格的素描图(正常,漫画…

String的理解

1.号 1. 1 号连接符的实现原理 StringBuilder(或者StringBuffer)的apend方法拼接,然后toString方法返回新的字符串 1.2 号的特殊情况 1.2.1 当""两端均为编译期确定的字符串常量时,编译器会进行相应的优化&#xf…

springboot项目外卖管理 day05-新增与删除套餐

文章目录 一、新增菜品1.1、需求分析1.2、数据模型setmealsetmeal_dish 1.3、代码开发-梳理交互过程1.3.1、下拉框展示1.3.2、菜品窗口展示1.3.3、新增套餐 2、套餐分页查询 一、新增菜品 1.1、需求分析 套餐就是菜品的集合。 后台系统中可以管理套餐信息,通过新…

solr快速上手:常用查询语法(八)

0. 引言 solr作为搜索引擎,就像我们使用mysql一样,在日常业务中,更多接触的则是各类操作语法,所以今天,我们再来学习solr的常用查询语法,为大家在工作中最基本的solr查询打下基础。 solr快速上手&#xff…

ia write 自定义 导出模板

https://github.com/yangyang5214/github-plus.iatemplate 使用了点个 star 吧) 在原有的 GitHub 模板基础上,增加了 封面页面和页脚。 封面页面 展示文章标题 作者 时间。高端大气~ 增加页脚,显示 page/pageCount 加载 通过…

做策划有这些特质才能成为行业大咖,看看你符合几个

这个问题确实很重要,策划也不是职业也不是适合所有人的! 首先,从性格方面来说吧。 有些人就是适合说话,有些人就是适合埋头苦干,还有一些人有强大的学习能力和逻辑思维。所以就是适合做创意类、创作类、策划类、统筹…

百度翻译API使用教程(前端+后端)

1.资格获取 首先我们需要登录百度翻译开放平台,获取开发者资格: 访问 百度翻译开放平台 然后进行注册(如果有百度账号的话可以直接登录) 注册成功后点击“产品服务”: 跳转到通用文本API界面: 在页面底…

怎么自学电脑编程

首要之首:不要急于选择一种语言 新手们有一个常见的错误就是犹豫于判断哪种编程语言是做好的、最该先学的。 我们有很多的选择,但你不能说那种语言最好。 我们应该理解:说到底,什么语言并不重要。 重要的是理解数据结构、控制逻辑…

C语言——修改控制台背景色和字体颜色

C语言——修改控制台背景色和字体颜色 方法一&#xff1a;system(“color NUM1NUM2”) system("color NUM1NUM2");可以用库函数system(“color NUM1NUM2”)实现 需要头文件 <stdlib.h> NUM1,NUM2均为16进制数 NUM1控制控制台背景色&#xff0c;NUM2控制前…

大数据驱动的实时文本情感分析系统:构建高效准确的情感洞察【上进小菜猪大数据】

上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货。 随着互联网的快速发展和大数据技术的不断成熟&#xff0c;用户推荐系统在各个应用领域变得越来越重要。本文将介绍如何利用大数据技术构建一个实时用户推荐系统。我们将通过结合Ap…

基本算法温习:打印金字塔

最终结果图如下&#xff1a; 想达到这个结果&#xff0c;通常的做法是通过拼结两个三角型达到&#xff0c;但是实际上还有最右边的第三个三角型没有处理&#xff0c;这个拼结的方法总让人看起来有一点不完美的感觉&#xff0c;于是我自创了一个思路&#xff0c;一气合成&#x…

【数据结构】七大排序算法(超详细)

欢迎来到南方有乔木的博客&#xff01;&#xff01;&#xff01; 博主主页&#xff1a;点击点击&#xff01;戳一戳&#xff01;&#xff01; 博主名:南方有乔木 博主简介&#xff1a; 一名在校大学生&#xff0c;正在努力学习Java语言编程。穷且意坚&#xff0c;不坠青云之志&…

uniapp和springboot微信小程序开发实战:后端架构搭建之封装WEB接口返回对象

文章目录 前言本节所需依赖工具类实现测试代码运行结果总结前言 作为开发者,开发的接口请求返回数据类型有很多种。比如返回字符串,返回对象,返回集合数组等情况,每个人开发者都有自己喜欢的方式或风格。所以在一个项目开发的时候架构师会定义好返回对象,给前端返回数据格…

redis基本数据类型001String

String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象 一个Redis中字符串value最多可以是512M 应用场景 需要存储常规数据的场景 缓存 session、token、图片地址、序列化后的对象(相比较于 Hash 存储更节省内存)。 需要计数的场景 举…

Singer混沌映射与莱维飞行改进灰狼算法

目录 一、灰狼算法 二、改进策略 2.1 混沌初始化种群 2.2 非线性收敛因子 三、引入莱维飞行 四、运行结果 从改进运行结果来看&#xff0c;效果非常好&#xff0c;在、、等极易陷入局部最优的测试函数上都取到了最优值&#xff0c;收敛速度也得到极大提升。 一、灰狼算法…

数学模型:Python实现整数规划

上篇文章&#xff1a;线性规划 文章摘要&#xff1a;整数规划的Python实现。 参考书籍&#xff1a;数学建模算法与应用(第3版)司守奎 孙玺菁。 PS&#xff1a;只涉及了具体实现并不涉及底层理论。学习底层理论以及底层理论实现&#xff1a;可以参考1.最优化模型与算法——基于P…