《数据库开发实践》之存储过程【知识点罗列+例题演练】
一、什么是存储过程?
1.概念理解:
存储过程是一组为了完成特定功能的SQL语句集。通过组成SQL语句和控制语句,提供一种封装任务的方法。因此在创建编译好某个存储过程后,因为存储过程中有可执行操作的sql语句,用户可以根据需求,调用该过程时输入参数即可执行。简单一点理解,也就是相当于我们在JAVA里面写的代码一样,封装好 某个类、方法,这样在需要这个方法的时候就去调用其,就不用再重新又写、反复写。
2.存储过程的优点:
| (1)模块化的程序设计 |
| (2)在服务器端运行,具有高效率的执行力 |
| (3)减少网络流量,存储过程在编译后,也就是要在执行一次之后,它的执行规划就会保留在高速缓冲存储器中,用户在后期调用该存储过程时,后台便只需从高速缓冲存储器中调用编译好的二进制代码,提高了系统性能 |
| (4)确保数据库的安全,防止了用户暴露数据库表的细节,可以作为安全机制使用 |
3.存储过程的分类:
- 系统存储过程
- 用户自定义存储过程
二、Mysql语句创建、执行和删除存储过程
1.创建存储过程
| 创建时需要事先确定存储过程的三个组成部分: |
| (1).所有的输入参数以及传给调用者的输出参数。 |
| (2).被执行的针对数据库的操作语句,包括调用其他存储过程的语句。 |
| (3).返回给调用者的状态值以指明调用是成功还是失败。 |
(1) 创建语法格式:
CREATE PROCEDURE 存储过程名 ([参数 ... ]) [特征 ...] 存储过程体a.参数=:[ IN | OUT | INOUT ] 参数名 参数类型
- 参数的命名不要与所联系的数据表的列名出现相同的
- 有多个参数的时候,要用逗号隔开
IN类型——输入参数 可以使数据传递给存储过程 OUT类型——输出参数 当需要返回一个结果时使用 INOUT类型——输入/输出参数 两者都可以充当 b.特征=:LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string'
特征 对应内容 LANGUAGE SQL 存储过程的语言为SQL [NOT] DETERMINISTIC 存储过程是否确定性,即存储过程对同样的输入参数产生的结果是否相同 CONTAINS SQL [默认选项] 存储过程的子程序包含SQL语句,但是不包含读、写数据的语句 NO SQL 存储过程中不包含SQL语句 READS SQL DATA 存储过程只读取SQL数据 MODIFIES SQL DATA 存储过程只修改SQL数据 SQL SECURITY { DEFINER | INVOKER } 存储过程执行的身份者指定
- DEFINER:默认。创建该存储过程的用户许可
- INVOKER:使用存储过程的用户许可
COMMENT 'string' 存储过程的描述备注,string是描述的内容。使用SHOW CREATE PROCEDURE 就可以显示该信息 c.存储过程体:存储过程的主体部分,包含了调用存储过程时必会执行的SQL语句。
- 开始标志是BEGIN,结束标志是END,只有 一条SQL语句时可以省略开始和结束标志;
- 还需要注意的一个点是,因为存储过程里面的SQL语句是以分号结尾的,所以服务器在处理程序的时候遇到第一个分号就会以为要结束程序了,所以需要我们使用“Delimiter 结束符号”命令将Mysql语句的结束标志更改一下,编译后再恢复分号结束标志。
2.修改存储过程特征
MySQL只能通过ALTER语句修改存储过程的特征,不能修改存储过程体的内容,如需修改存储过程体的内容,需要先删除存储过程再重新创建
3.查看存储过程
show procedure status [like 'pattern'];
其中,like 'pattern'为可选参数,用来匹配存储过程的名称,如果不指定该参数,则会查看所有的存储过程。
4.调用执行存储过程
call sp_name[(传参)];
其中,sp_name为所执行的存储过程名称,传参表示根据存储过程定义时的参数进行传参。
5.删除存储过程
drop procedure [if exists] 存储过程名;
三、异常处理
(1)MySQL定义异常捕获类型及处理方法的语法如下:
DECLARE handler_action HANDLER FOR condition_value [, condition_value] ... statement handler_action: CONTINUE | EXIT | UNDO condition_value: mysql_error_code | SQLSTATE [VALUE] sqlstate_value | condition_name|SQLWARNING|NOT FOUND| SQLEXCEPTION
a.HANDLER :异常关键词
b.FOR:声明
c.statement:表示出现某种条件、错误的时候需要执行的语句
- 可以是简单的一句SQL语句
- 可以是复杂的多行语句——这里就需要用起始标签Begin和结束标签End
d.hander_action:异常类型,表示执行完statement后希望系统执行什么动作
- CONTINUE | EXIT | UNDO
- continue:程序继续——SQL WARNING和NO FOUND 的默认处理方法
- exit:跳出程序——SQLEXCEPTION的默认处理方法
- undo:程序回滚,撤销
d.condition_value:表示一个异常处理可以定义成针对多种情况进行相应的操作
condition_value 内容 mysql_error_code MySQL错误码,一个由mysql自定义的数字 SQLSTATE[VALUE] sqlstate_value SQL状态码,一个由五个字符组成的字符串 condition_name 条件名称,使用declare...condition语句定义 SQLWARNING SQL警告,表示SQLSTATE中字符串以‘01’起始的错误 NOT FOUND 找不到,表示SQLSTATE中字符串以‘02’起始的错误 SQLEXCEPTION SQL异常,表示SQLSTATE中字符串不以‘00’,‘01’,‘02’起始的错误
其中,‘00’是表示成功执行。
四、例题演练
1.创建一个存储过程p_yg1:
实现根据传入参数部门名称可以查询各部门所有员工的员工编号,员工姓名和职务。并调用此存储过程查询“技术”部门员工的员工编号,员工姓名和职务
delimiter // create procedure p_yg1( IN departmentName varchar(30)) begin select ygxx.ygbh,ygxx.name,ygxx.zw from ygxx inner join bmxx on ygxx.ssbmbh=bmxx.bmbh where bmxx.bmmc=departmentName; end // delimiter;(1)创建存储过程p_yg1
(2)调用存储过程p_yg1
2.创建一存储过程p_intsp1:
- 通过带参数的存储过程向表spxx中插入一条数据,传入参数为spbh,spmc,sslb,jg,sl
- 如果插入主键重复数据(错误号1062),则将spbh和spmc插入错误记录表splog中
- 数据插入时间赋为当前日期,操作标志位赋上'insert'。
DELIMITER // CREATE PROCEDURE p_intsp1 (IN spbh VARCHAR(20), IN spmc VARCHAR(30), IN sslb VARCHAR(20), IN jg DOUBLE, IN sl INT) BEGINDECLARE t_error INTEGER DEFAULT 0;DECLARE CONTINUE HANDLER FOR 1062 SET t_error = 1;INSERT INTO spxx (spbh, spmc,sslb, jg, sl) VALUES (spbh, spmc,sslb, jg, sl);IF t_error = 1 THENINSERT INTO splog (spbjlog, spmclog, sjlog, bz) VALUES (spbh, spmc, NOW(), 'insert');ELSE COMMIT;END IF;END // DELIMITER ;(1)创建存储过程p_intsp1
(2)调用存储过程
a.展示当前的商品信息表和记录表
b.插入一条数据,重复了主键id
c.此时商品信息表没有新数据插入,记录log表插入新数据
相关文章:
《数据库开发实践》之存储过程【知识点罗列+例题演练】
一、什么是存储过程? 1.概念理解: 存储过程是一组为了完成特定功能的SQL语句集。通过组成SQL语句和控制语句,提供一种封装任务的方法。因此在创建编译好某个存储过程后,因为存储过程中有可执行操作的sql语句,用户可以…...
Linux进程地址空间
🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:HEART BEAT—YOASOBI 2:20━━━━━━️💟──────── 5:35 🔄 ◀️ ⏸ ▶️ ☰ …...
2024.1.3 关于 Redis 渐进式遍历 和 数据库管理命令
目录 引言 渐进式遍历 SCAN 命令 数据库管理命令 切换数据库 获取数据库 key 个数 删除数据库所有 key 同步删除 SYNC 异步删除 ASYNC 阅读下述文章之前建议点击下方链接熟悉 keys 命令的用法和特点 Redis 全局通用命令 渐进式遍历 keys * 命令一次性将 Redi…...
并发编程:线程同步基础:5、读写锁。ReentrantReadWriteLock
1、主要方法 .readLock().lock();获取读锁 读锁之间互不干扰。 .writeLock().lock();获取写锁 写锁可以锁定住读锁和其他写操作。 2、主程序 package xyz.jangle.thread.test.n2_5.rwlock;import java.util.concurrent.TimeUnit;/*** * 读写锁。ReentrantReadWriteLock* a…...
SpringBoot 集成 Kafka消息中间件,Docker安装Kafka环境
前述 提供kafka、zooker在docker环境下进行安装的示例,springBoot集成kafka实现producer-生产者和consumer-消费者(监听消费:single模式和batch模式)的功能实现 环境安装 # 拉取镜像 docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka# 运行zooker docker …...
阿里云Alibaba Cloud Linux 3镜像版本大全特性说明
Alibaba Cloud Linux阿里云打造的Linux服务器操作系统发行版,Alibaba Cloud Linux完全兼容完全兼容CentOS/RHEL生态和操作方式,目前已经推出Alibaba Cloud Linux 3,阿里云百科aliyunbaike.com分享Alibaba Cloud Linux 3版本特性说明ÿ…...
基于SSM的滁艺咖啡在线销售系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
【设计模式之美】理论一:怎么才算是单一原则、如何取舍单一原则
文章目录 一. 如何判断类的职责是否足够单一?二. 类的职责是否设计得越单一越好? 开始学习一些经典的设计原则,其中包括,SOLID、KISS、YAGNI、DRY、LOD 等。 本文主要学习单一职责原则的相关内容。 单一职责原则的定义:…...
MYSQL 深入探索系列六 SQL执行计划
概述 好久不见了,近期一直在忙项目的事,才有时间写博客,近期频繁出现sql问题,今天正好不忙咱们看看千万级别的表到底该如何优化sql。 案例 近期有个小伙伴生产环境收到了告警,有个6千万的日志表,查询耗时大…...
安装jupyter notebook,jupyter notebook的简单使用
借助anaconda安装jupyter notebook,先下载anaconda然后在Anaconda Prompt中输入命令: 输入"jupyter notebook",在默认浏览器中打开jupyter notebook。 输入"jupyter notebook --no-browser",启动服务器,但不打…...
宏集PC Runtime软件助推食品行业生产线数字化革新
一、前言 近年来,中国食品行业发展迅速且灵活多变,在当前经济下行的情形下,食品行业正面临着日益激烈的竞争,导致企业利润下降。 为了保持企业市场竞争力,国内某top10食品企业采用宏集SCADA解决方案—PC Runtime软件…...
python的课后练习总结3之条件语句
1,简单点,只有IF IF 后面加入条件然后冒号: 条件成立执行的代码1 条件成立执行的代码2 条件是否成立都执行的代码 身高 float(input(请输入你的身高(米):)) if 身高 > 1.3:print(f您的身高是{身高}米,请您买票) print(祝您旅途愉快) 2,IF 加个else if 条件:…...
RedisTemplate序列化
SpringBoot整合Redis,配置RedisTemplate序列化。如果使用StringRedisTemplate,那么不需要配置序列化,但是StringRedisTemplate只能存储简单的String类型数据,如图: 如果使用StringRedisTemplate存储一个常规对象&#…...
小米SU7汽车发布会; 齐碳科技C+轮融资;网易 1 月 3 日发布子曰教育大模型;百度文心一言用户数已突破 1 亿
投融资 • 3200 家 VC 投资的创业公司破产,那个投 PLG 的 VC 宣布暂停投资了• 云天励飞参与 AI 技术与解决方案提供商智慧互通 Pre-IPO 轮融资• 百度投资 AIGC 公司必优科技• MicroLED量测公司点莘技术获数千万级融资• 智慧互通获AI上市公司云天励飞Pre-IPO轮战…...
Python----matplotlib库
目录 plt库的字体: plt的操作绘图函数: plt.figure(figsizeNone, facecolorNone): plt.subplot(nrows, ncols, plot_number): plt.axes(rect): plt.subplots_adjust(): plt的读取和显示相关函数: plt库的基础图…...
PostgreSQL荣获DB-Engines 2023年度数据库
数据库流行度排名网站 DB-Engines 2024 年 1 月 2 日发布文章宣称,PostgreSQL 荣获 2023 年度数据库管理系统称号。 PostgreSQL 在过去一年中获得了比其他 417 个产品更多的流行度增长,因此获得了 2023 年度 DBMS。 DB-Engines 通过计算每种数据库 2024 …...
【每天五道题,轻松公务员】Day3:太阳常识
目录 专栏了解 ☞欢迎订阅☜ ★专栏亮点★ ◇专栏作者◇ 太阳常识 题目一 题目二 题目三 题目四 题目五 答案 补充扩展 专栏了解 ☞欢迎订阅☜ 欢迎订阅此专栏:考公务员,必订!https://blog.csdn.net/m0_73787047/category_1254…...
基于metersphere和supper-jacoco 测试覆盖率落地实践
一、背景及目标 背景 1、技术研发流程为测试 提供冒烟用例-开发根据用例自测-提测-开始测试,这一套流程,但是中间开发是否真实执行冒烟,测试并不知晓,而且测试提供冒烟用例是否符合标准也没法进行量化 2、公司产品属于saas产品&…...
LeetCode每周五题_2024/01/01~2024/01/05
文章目录 1599. 经营摩天轮的最大利润 [2024/01/01]题目题解 466. 统计重复个数 [2024/01/02]题目题解 2487. 从链表中移除节点 [2024/01/03]题目题解 1599. 经营摩天轮的最大利润 [2024/01/01] 题目 1599. 经营摩天轮的最大利润 你正在经营一座摩天轮,该摩天轮共…...
【华为OD机试真题2023CD卷 JAVAJS】抢7游戏
华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 抢7游戏 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: A、B两个人玩抢7游戏,游戏规则为A先报一个起始数字X(10<起始数字<10000),B报下一个数字Y(X-Y<3),A再报一个数字Z(Y-Z<3),以此类推,直…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...






