MySQL进阶篇之视图/存储过程/触发器
今天我们主要来快速学习视图,存储过程,触发器四个方面的内容,一起加油学习吧,还有半年就有秋招了,要加快速度了,迫在眉睫,冲吧,兄弟们。
目录
1、视图
2、存储过程
3、存储函数
4、触发器
5、小结
1、视图
视图是虚拟的表,并不保存数据,只保存相应的SQL逻辑,不保存查询结果。

下面看一下视图的几种基本操作,分别为创建视图,查询视图,修改视图,删除视图。

视图检查选项:cascaded,在创建视图的时候可以对视图添加检测选项,当对视图执行插入等操作,会进行检查,不满足要求的禁止插入视图,防止视图失效。通过cascaded选项,可以进行检查。

视图的更新:要保证视图中的行与基本表中的行是一一对应关系,否则是不允许更新的。也不允许插入。如果使用了聚合函数,分组,去重等关键字。

下面看一下视图的主要作用,首先就是使用简单,可以把经常使用的复杂操作定义为视图,用户不必为后面的每次操作都指定条件;还有就是安全,数据库授权是到特定的表,而通过视图可以授权到相应的行和列。数据独立,可以根据基础的变化进行修改。

2、存储过程
存储过程:存在数据库中SQL语句的集合,减少数据在数据库和服务器之间的传输,提高处理性能,就是对SQL语句的封装和重用。
存储过程特点:实现了SQL的封装和复用,可以传参和返回数据,减少数据传输,提升性能。

下面看一下存储过程的创建和调用,存储过程的创建和调用如下:
下面看一下存储过程的查看和删除,查看存储过程有两种方式,第一种是查看数据的所有存储过程,查询某个存储过程的定义,如下:
注意:在创建存储过程的SQL时,需要通过delimeter指定SQL语句的结束符。
我们在看一下数据库存储过程中涉及的变量,比如系统变量,MySQL服务器提供的,分为全局变量和会话变量。可以查看系统变量,也可以设置系统变量。

用户自定义变量,不需要声明,直接用@变量名使用就可以,可以用set方式设置变量,可以select方式查询和设置变量,可以将查询结果赋值给变量。

局部变量的作用范围在begin和end之间,下面创建一个存储过程,定义一个局部变量,将查询的结果赋值给stu_count变量名,最后查询该变量,通过call调用存储过程。


下面看一个if条件判断,语法规则就是if 满足就then,END IF结束if

之前存储过程都是没有传参,可以通过参数进行传参,和其它的编程语言的函数很像。in指定输入参数,out指定输出参数,inout指定既可以是输入又可以是输出的参数。

下面的传入的是score,返回的数据是result,直接定义就可以,用call调用即可。
下面的score既作为输出,又作为输出,如下所示,用inout定义。

下面再看存储过程中的case语法,case语法有两种基本的语法结构。本质上都是when的条件满足就执行then,最后用END CASE结束。

下面用第2种语法结构去判断传入的月份属于哪一个季度,具体如下:

再看存储过程的循环语句,while语句,这个也是很基础的,和其它编程语言差不多。

下面是用while实现从1累加到n的实现过程,具体如下:

再看第二种循环repeat,满足条件退出循环,和while刚好相反,如下:从n一直加到1,循环累加。当n小于等于退出循环。

我们再看一下Loop循环,使用leave退出循环,iterate用来跳过当前循环,直接进入下一次循环。

我们使用loop循环进行从1到n的累加,具体如下,需要使用leave退出循环,如下:

游标cursor:
游标也是一个面试可能问到的内容,游标是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。
一般需要先声明游标存储的结果集,然后打开游标,并循环获取游标中的记录,并执行相应的插入等操作,最后关闭游标,不过需要判断当游标中满足条件的记录都被取出后,需要结束循环。

可以使用条件处理程序Handler定义相应的处理步骤,比如:游标中数据取完了后退出循环。

3、存储函数
存储函数就是有返回值的存储过程,是必须有返回。其实存储函数完全可以背存储 过程替代,所以用的很少。

4、触发器
触发器是和表有关的数据库对象,是指在执行相应的数据操纵之前或之后,触发并执行触发器中的SQL语句集合,比如执行:日志操作,数据校验等,这样可以在数据库端保证数据的完整性。
使用old和new来引用触发器中发生变化的内容,与其它数据库类似。
行级触发器,影响多少行触发多少次,语句级触发器,不管影响多少行,只出发一次。现在的触发器仅支持行级触发器。
触发器语法:创建触发器,可以指定在执行何种操作之前或者之后触发,针对那张表的触发,可以查看和删除触发器。

先看一个需求,要求使用触发器将tb_user表变更的日志记录到user_logs表中。

我们看一下insert触发器,创建一个在tb_user表中插入数据之后,执行触发器,触发内容为向日志表user_logs中插入相应的字段进行记录。
c
我们看一下update触发器,在更新之后进行触发,并向日志表中记录插入更新之前的数据和更新之后的数据,old获取更新之前的数据,new获取更新之后的数据。触发器都是行级触发器,影响多少行,触发器就触发多少次。

我们再看一下delete触发器,在delete之后进行触发,记录删除前的数据,并插入到日志表中。

5、小结
视图->存储过程->存储函数->触发器。

相关文章:
MySQL进阶篇之视图/存储过程/触发器
今天我们主要来快速学习视图,存储过程,触发器四个方面的内容,一起加油学习吧,还有半年就有秋招了,要加快速度了,迫在眉睫,冲吧,兄弟们。 目录 1、视图 2、存储过程 3、存储函数 4、…...
【一看就会】实现仿京东移动端页面滚动条布局
简单粗暴直接上代码: <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" content&q…...
网易的“草长莺飞二月天”:增长稳健,加码研发,逐浪AI
2月23日,网易发布了2022年第四季度财报。 这是网易与暴雪分道扬镳后的首份财报,加上近期AIGC热度扩散至游戏、教育等各个领域,网易第四季度业绩及其对于GPT等热门技术的探索受到市场关注。 根据财报,第四季度,网易营…...
NPC内网穿透教程-入门
安装 安装包安装 releases下载 下载对应的系统版本即可,服务端和客户端是单独的 源码安装 安装源码 go get -u ehang.io/nps 编译 服务端go build cmd/nps/nps.go 客户端go build cmd/npc/npc.go docker安装 server安装说明 client安装说明 启动 服务端 下…...
【Linux修炼】14.磁盘结构/文件系统/软硬链接/动静态库
每一个不曾起舞的日子,都是对生命的辜负。 磁盘结构/文件系统/软硬链接/动静态库前言一.磁盘结构1.1 磁盘的物理结构1.2 磁盘的存储结构1.3 磁盘的逻辑结构二.理解文件系统2.1 对IO单位的优化2.2 磁盘分区与分组2.3 分组的管理方法2.4 文件操作三.软硬链接3.1理解硬…...
Spring源码分析:创建 BeanDefinition 流程
一、前期准备1.1 环境依赖<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.7.RELEASE</version></dependency><dependency><groupId&…...
Linux 练习一(思维导图 + 练习过程)
文章目录一、Linux 用户管理及文件操作第一段练习记录:主要对用户进行删除添加设置密码等操作第二段练习记录:主要包括权限设置和查找命令第三段练习记录:关于文件的命令练习第四段练习记录:查找命令及查看内存命令的使用二、Linu…...
高德地图基础教程超详细版
在当前社会,对于地图的使用是很必须的,所以对于程序员来说也是需要掌握的技能,目前主流的又百度地图和高德地图,但是我建议使用高德地图,因为百度地图的API着实不好用吖,不好理解,对于开发人员来…...
基于A7核开发板的串口实现控制LED亮灭
1.通过操作Cortex-A7核,串口输入相应的命令,控制LED灯进行工作 1>例如在串口输入led1on,开饭led1灯点亮 2>例如在串口输入led1off,开饭led1灯熄灭 3>例如在串口输入led2on,开饭led2灯点亮 4>例如在串口输入led2off,开饭led2灯熄灭 5>例如…...
HyperGBM用Adversarial Validation解决数据漂移问题
本文作者:杨健,九章云极 DataCanvas 主任架构师 数据漂移问题近年在机器学习领域来越来越得到关注,成为机器学习模型在实际投产中面对的一个主要挑战。当数据的分布随着时间推移逐渐发生变化,需要预测的数据和用于训练的数据分布…...
关基系统三月重保安全监测怎么做?ScanV提供纯干货!
三月重保当前,以政府、大型国企央企、能源、金融等重要行业和领域为代表的关键信息基础设施运营单位都将迎来“网络安全大考”。 对重要关基系统进行安全风险监测并收敛暴露面,响应监管要求进行安全加固,重保期间实时安全监测与数据汇报等具体…...
RK3588关键电路 PCB Layout设计指南
1、音频接口电路 PCB 设计(1)所有 CLK 信号建议串接 22ohm 电阻,并靠近 RK3588 放置,提高信号质量;(2)所有 CLK 信号走线不得挨在一起,避免串扰;需要独立包地,…...
二分边界详细总结
一、查找精确值 从一个有序数组中找到一个符合要求的精确值(如猜数游戏)。如查找值为Key的元素下标,不存在返回-1。 //这里是left<right。 //考虑这种情况:如果最后剩下A[i]和A[i1](这也是最容易导致导致死循环的…...
STM32---备份寄存器BKP和 FLASH学习使用
BKP库函数 学习BKP,首先就是知道BKP每一个函数的作用然后如何使用即可 使用备份域的作用只需要操作上面的两个函数即可,其余的都是它的其他功能 BKP简介 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份…...
Python-生成元组和字典
1.生成元组元组是元素按顺序组合后的产物,元组对象的类型是tuple型含有两个元素的元组成为数据对元组可以包含任意数量和任意类型的元素,其元素总数可以为0、1、2等,并且元素的先后顺序是由意义的。另外,元组中的元素类型没有必要…...
I.MX6ULL内核开发10:设备树
目录 一、设备树简介 二、设备树源码 三、获取设备树信息 1、增加设备节点 2、内核编译设备树 3、替换设备树文件 4、查看设备树节点 5、在驱动中获取节点的属性 6、编译驱动模块 7、加载模块 一、设备树简介 设备树的作用是描述一个硬件平台的硬件资源。这个“设备树…...
【大数据】记一次hadoop集群missing block问题排查和数据恢复
问题描述 集群环境总共有2个NN节点,3个JN节点,40个DN节点,基于hadoop-3.3.1的版本。集群采用的双副本,未使用ec纠删码。 问题如下: bin/hdfs fsck -list-corruptfileblocks / The list of corrupt files under path…...
国产音质好的蓝牙耳机有哪些?国产音质最好的耳机排行
随着时间的推移,真无线蓝牙耳机逐渐占据耳机市场的份额,成为人们日常生活中必备的数码产品之一。蓝牙耳机品牌也多得数不胜数,哪些国产蓝牙耳机音质好?下面,我们从音质出来,来给大家介绍几款国产蓝牙耳机&a…...
CTFer成长之路之XSS的魔力
XSS的魔力CTF XSS闯关 题目描述: 你能否过关斩将解决所有XSS问题最终获得flag呢? docker-compose.yml version: "3.2"services:xss:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-xss:latestports:- 3000:3000启动方式 docker-compose up -…...
行锁、表锁、主键外键、表之间的关联关系
Java知识点总结:想看的可以从这里进入 目录2.4、行锁、表锁2.5、主键、外键2.5.1、主键2.5.2、外键2.6、表的关联关系2.4、行锁、表锁 MyISAM默认采用表级锁,InnoDB默认采用行级锁。 表锁:开销小,加锁快,不会出现死锁…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
