当前位置: 首页 > news >正文

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、…...

【一看就会】实现仿京东移动端页面滚动条布局

简单粗暴直接上代码&#xff1a; <!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日&#xff0c;网易发布了2022年第四季度财报。 这是网易与暴雪分道扬镳后的首份财报&#xff0c;加上近期AIGC热度扩散至游戏、教育等各个领域&#xff0c;网易第四季度业绩及其对于GPT等热门技术的探索受到市场关注。 根据财报&#xff0c;第四季度&#xff0c;网易营…...

NPC内网穿透教程-入门

安装 安装包安装 releases下载 下载对应的系统版本即可&#xff0c;服务端和客户端是单独的 源码安装 安装源码 go get -u ehang.io/nps 编译 服务端go build cmd/nps/nps.go 客户端go build cmd/npc/npc.go docker安装 server安装说明 client安装说明 启动 服务端 下…...

【Linux修炼】14.磁盘结构/文件系统/软硬链接/动静态库

每一个不曾起舞的日子&#xff0c;都是对生命的辜负。 磁盘结构/文件系统/软硬链接/动静态库前言一.磁盘结构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 用户管理及文件操作第一段练习记录&#xff1a;主要对用户进行删除添加设置密码等操作第二段练习记录&#xff1a;主要包括权限设置和查找命令第三段练习记录&#xff1a;关于文件的命令练习第四段练习记录&#xff1a;查找命令及查看内存命令的使用二、Linu…...

高德地图基础教程超详细版

在当前社会&#xff0c;对于地图的使用是很必须的&#xff0c;所以对于程序员来说也是需要掌握的技能&#xff0c;目前主流的又百度地图和高德地图&#xff0c;但是我建议使用高德地图&#xff0c;因为百度地图的API着实不好用吖&#xff0c;不好理解&#xff0c;对于开发人员来…...

基于A7核开发板的串口实现控制LED亮灭

1.通过操作Cortex-A7核&#xff0c;串口输入相应的命令&#xff0c;控制LED灯进行工作 1>例如在串口输入led1on,开饭led1灯点亮 2>例如在串口输入led1off,开饭led1灯熄灭 3>例如在串口输入led2on,开饭led2灯点亮 4>例如在串口输入led2off,开饭led2灯熄灭 5>例如…...

HyperGBM用Adversarial Validation解决数据漂移问题

本文作者&#xff1a;杨健&#xff0c;九章云极 DataCanvas 主任架构师 数据漂移问题近年在机器学习领域来越来越得到关注&#xff0c;成为机器学习模型在实际投产中面对的一个主要挑战。当数据的分布随着时间推移逐渐发生变化&#xff0c;需要预测的数据和用于训练的数据分布…...

关基系统三月重保安全监测怎么做?ScanV提供纯干货!

三月重保当前&#xff0c;以政府、大型国企央企、能源、金融等重要行业和领域为代表的关键信息基础设施运营单位都将迎来“网络安全大考”。 对重要关基系统进行安全风险监测并收敛暴露面&#xff0c;响应监管要求进行安全加固&#xff0c;重保期间实时安全监测与数据汇报等具体…...

RK3588关键电路 PCB Layout设计指南

1、音频接口电路 PCB 设计&#xff08;1&#xff09;所有 CLK 信号建议串接 22ohm 电阻&#xff0c;并靠近 RK3588 放置&#xff0c;提高信号质量&#xff1b;&#xff08;2&#xff09;所有 CLK 信号走线不得挨在一起&#xff0c;避免串扰&#xff1b;需要独立包地&#xff0c…...

二分边界详细总结

一、查找精确值 从一个有序数组中找到一个符合要求的精确值&#xff08;如猜数游戏&#xff09;。如查找值为Key的元素下标&#xff0c;不存在返回-1。 //这里是left<right。 //考虑这种情况&#xff1a;如果最后剩下A[i]和A[i1]&#xff08;这也是最容易导致导致死循环的…...

STM32---备份寄存器BKP和 FLASH学习使用

BKP库函数 学习BKP&#xff0c;首先就是知道BKP每一个函数的作用然后如何使用即可 使用备份域的作用只需要操作上面的两个函数即可&#xff0c;其余的都是它的其他功能 BKP简介 备份寄存器是42个16位的寄存器&#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备份…...

Python-生成元组和字典

1.生成元组元组是元素按顺序组合后的产物&#xff0c;元组对象的类型是tuple型含有两个元素的元组成为数据对元组可以包含任意数量和任意类型的元素&#xff0c;其元素总数可以为0、1、2等&#xff0c;并且元素的先后顺序是由意义的。另外&#xff0c;元组中的元素类型没有必要…...

I.MX6ULL内核开发10:设备树

目录 一、设备树简介 二、设备树源码 三、获取设备树信息 1、增加设备节点 2、内核编译设备树 3、替换设备树文件 4、查看设备树节点 5、在驱动中获取节点的属性 6、编译驱动模块 7、加载模块 一、设备树简介 设备树的作用是描述一个硬件平台的硬件资源。这个“设备树…...

【大数据】记一次hadoop集群missing block问题排查和数据恢复

问题描述 集群环境总共有2个NN节点&#xff0c;3个JN节点&#xff0c;40个DN节点&#xff0c;基于hadoop-3.3.1的版本。集群采用的双副本&#xff0c;未使用ec纠删码。 问题如下&#xff1a; bin/hdfs fsck -list-corruptfileblocks / The list of corrupt files under path…...

国产音质好的蓝牙耳机有哪些?国产音质最好的耳机排行

随着时间的推移&#xff0c;真无线蓝牙耳机逐渐占据耳机市场的份额&#xff0c;成为人们日常生活中必备的数码产品之一。蓝牙耳机品牌也多得数不胜数&#xff0c;哪些国产蓝牙耳机音质好&#xff1f;下面&#xff0c;我们从音质出来&#xff0c;来给大家介绍几款国产蓝牙耳机&a…...

CTFer成长之路之XSS的魔力

XSS的魔力CTF XSS闯关 题目描述: 你能否过关斩将解决所有XSS问题最终获得flag呢&#xff1f; docker-compose.yml version: "3.2"services:xss:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-xss:latestports:- 3000:3000启动方式 docker-compose up -…...

行锁、表锁、主键外键、表之间的关联关系

Java知识点总结&#xff1a;想看的可以从这里进入 目录2.4、行锁、表锁2.5、主键、外键2.5.1、主键2.5.2、外键2.6、表的关联关系2.4、行锁、表锁 MyISAM默认采用表级锁&#xff0c;InnoDB默认采用行级锁。 表锁&#xff1a;开销小&#xff0c;加锁快&#xff0c;不会出现死锁…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...