既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
1 概述
1.1 What
存储过程是大型数据库系统中,一组为了完成特定功能的 SQL 语句集,这些 SQL 语句集存储在数据库中,经过第一次编译后,后续调用不需要再次编译,用户通过存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程是数据库的一个重要对象。
1.2 Why
使用存储过程的原因(也就是使用存储过程的优点)如下:
- 当对数据库进行复杂操作时(如对多个表进行增删改查),可将这些复杂操作通过存储过程封装起来,与数据库提供的事务处理结合起来使用;
- 存储过程只在创造时进行编译,以后每次执行存储过程都不需重新编译;而一般SQL语句每执行一次就需要编译一次,所以使用存储过程可提高数据库执行速度;
- 存储过程有助于减少应用程序和数据库服务器之间的流量。使用存储过程时,应用程序不必再向数据库服务器发送多个冗长的 SQL 语句,而只需发送存储过程的名称(和参数)即可;
- 存储过程对任何应用程序都是可重用的和透明的,且存储过程可以重复使用。存储过程将数据库接口暴露给所有应用程序,开发人员无需重复开发存储过程中已支持的功能,这可以减少数据库开发人员的工作量;
- 存储过程是安全的。参数化的存储过程可以防止 SQL 注入式攻击,同时,数据库管理员可以为访问数据库中存储过程的应用程序授予适当的权限,而不针对基础数据库表放开任何权限。
1.3 How
当前,几大数据库厂商提供的编写存储过程的工具没有统一,虽然它们针对存储过程的编写风格有些相似,但由于没有统一的标准,因此各家的开发调试过程也不一样。
本文在下一节中会针对不同的数据库,分别介绍其存储过程的使用方法。
2 用法示例
2.1 MySQL
2.1.1 一个简单的存储过程示例
DELIMITER //
CREATE PROCEDURE GetOccupation(OUT s TEXT)
BEGIN
SELECT occupation into s FROM roles WHERE role_id = 1;
END //
DELIMITER ;
针对上述示例,进行以下说明:
- 命令“DELIMITER //”,与存储过程语法无关。DELIMITER 语句将标准分隔符分号“;”更改为双反斜杠“//”。更改分隔符的原因,在于想将存储过程的内容作为一个整体传递给数据库服务器,而不让 mysql 工具单独解释每个 SQL 语句(在上面的示例中,假如不更改分隔符,那么 SELECT 语句就会单独执行,如果存储过程中存在多个类似的语句,那么每条语句都会被单独执行,这显然不是我们想要的)。在 END 关键字之后,使用分隔符“//”来表示存储过程的内容到此结束。最后的 DELIMITER 命令将分隔符更改回分号“;”;
- 使用“CREATE PROCEDURE”语句创建一个新的存储过程。在该语句后指定待创建的存储过程的名称。在上面的示例中,存储过程的名称为“GetOccupation”,其后携带着该存储过程的参数信息(即 TEXT 类型的出参“s”);
- BEGIN 和 END 之间的部分称为存储过程的主体。将声明性 SQL 语句放在主体之中以处理业务逻辑。在上面的存储过程中,使用了一个简单的 SELECT 语句来查询 roles 表中的 occupation 字段的数据。
2.1.2 创建存储过程
有多种方式可以将存储过程录入数据库(即创建存储过程),在此我们通过 MySQL 客户端命令行工具,录入前面的存储过程示例。过程如下:
说明:也可以通过将存储过程内容写入一个文件,直接将该文件内容导入数据库中;或者通过 GUI 工具创建存储过程。
2.1.3 查询存储过程信息
通过 MySQL 客户端命令行工具,查询存储过程信息,命令如下:
SHOW PROCEDURE STATUS;
在存储过程创建完成后,执行查询命令得到的结果如下:
另外,可以通过如下命令查询存储过程的详细内容,如下:
SHOW CREATE PROCEDURE PROCEDURE_NAME
![img](https://img-blog.csdnimg.cn/img_convert/b344eb41d2010943fca49ce3a4b12c33.png)
![img](https://img-blog.csdnimg.cn/img_convert/0c4e688a5bdce774caffe291dcbf7c89.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**
图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**