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默认采用行级锁。 表锁:开销小,加锁快,不会出现死锁…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
