SQL第19课——使用存储过程

介绍什么是存储过程?为什么要使用存储过程?如何使用存储过程?创建和使用存储过程的基本语法?

19.1 存储过程

到目前为止,使用的大多数SQL语句都是针对一个或多个表的单条语句。

对于一些复杂的操作需要多条语句才能完成。

情形:

  1. 处理订单,必须核对以保证库存中有相应的物品。

  2. 当物品有库存时,需要预定,不再出售给别人,并且减少物品数据反映正确的库存量;

当库存中没有的物品需要订购,需要与供应商进行某种交互;

  1. 哪些物品入库(可以立即发货),哪些物品退订,需要通知相应的顾客。

单独编写每条SQL语句,并根据结果有条件地执行其他语句。

**创建存储过程:**为以后使用而保存的一条或多条SQL语句。可将其视为文件,但作用不仅限于批处理。

SQLite不支持存储过程。

19.2 为什么要使用存储过程

|-----------------------------------------------------------|
| 1. 把处理封装在一个易用的单元中,可以简化复杂的操作 |
| 2. 由于不要求反复建立一系列处理步骤,保证了数据的一致性。(所有人使用同一个存储过程,则所使用的代码都是相同的) |
| 3. 从第2点延申为防止错误,保证了数据的一致性 |
| 4. 简化对变动的管理。(表名等有变化时,只需要更改存储过程的代码。使用人员不需要知道这些变化) |
| 5. 第4点延申为安全性。通过存储过程限制对基础数据的访问,减少了数据讹误的机会 |
| 6. 存储过程通常以编译过的形式存储,所以DBMS处理命令所需的工作量少,提高性能。 |
| 7. 存在一些只能用在单个请求中的SQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码。 |
[使用存储过程的 主要好处]

简答 + 安全 + 高性能

|------------------------------------------------------------------------------------|
| 1. 不同DBMS的存储过程语法不同。但是存储过程的自我调节(名字以及数据如何传递)可以相对保持可移植。如果需要移植到别的DBMS上,至少客户端应用代码不需要变动。 |
| 2. 编写存储过程比编写基本SQL语句复杂。 需要更高的技能和更丰富的经验。 |
[SQL代码转换为存储过程前的 缺陷]

19.3 执行存储过程

存储过程的执行远比编写要频繁得多,用execute接受存储过程名和需要传递给它的任何参数。

存储过程所完成的工作:

  1. 验证传递的数据,保证所有参数都有值;

  2. 生成用作主键的唯一ID;

  3. 将新添加的东西插入到需要插入的表中,在合适的列中存储生成的主键和传递的数据。

19.4 创建存储过程

各种DBMS对存储过程的实现不一,需要根据使用的DBMS来参考具体的DBMS文档。不是很好说

相关推荐
handsome_sai10 分钟前
mysql索引
sql·1024程序员节
要开心吖ZSH1 小时前
一次线上锁风暴复盘:号源表大范围 DELETE 的隐患与分批删除改造
数据库·mysql·行锁·1024程序员节·间隙锁·lockwaittimeout
莫叫石榴姐2 小时前
半导体业务数仓建模: Lot、Wafer、Die、Recipe、OEE、YMS 建模要点
数据仓库·sql·面试·职场和发展·矩阵·1024程序员节
l1t2 小时前
在windows中测试musql数据库
数据库·sqlite·go·1024程序员节
鬼手点金2 小时前
从 API 消息到模型 Token:Chat Template
java·前端·javascript·数据库·人工智能·深度学习·1024程序员节
CRMEB系统商城3 小时前
Redis + 消息队列 + 连接池:CRMEB PRO 性能优化的三驾马车
大数据·数据库·人工智能·小程序·php·1024程序员节
鸽芷咕3 小时前
KingbaseES SQL 调优六步法:定位、诊断、下药、验证,一步都别省
数据库
黄俊懿3 小时前
【架构师从入门到进阶】第七章:缓存和存储的优化思路——第一节:缓存概述
数据结构·数据库·分布式·缓存·架构·系统架构·1024程序员节
John_Hui4 小时前
MySQL 进阶知识
数据库·sql·mysql·1024程序员节
java_nnnn4 小时前
Redis 核心特性与应用场景:从底层原理到分布式系统应用
数据库·redis·1024程序员节