:::info 存储过程可以封装多条SQL语句,保存在数据库中,可以被重复调用,执行效率高、安全性也比较高,是软件开发中常用的数据库技术,但是大量的存储过程也会给项目带来较多的维护成本。 :::
面试中有时候会问:存储过程有什么用?看了今天的知识,你就知道如何回答了。
1. 存储过程是什么?
假如你每天要开车完成一些列重复的操作:车钥匙启动车,倒车。现在出现了一款新车,可以自动的完成这些重复的工作。每次你上车以后,车就自动帮助你倒出来了。

同样的,在工作里也会经常遇到重复性的工作,这时候就可以把常用的 SQL 写好存储起来,这就是存储过程。
这样下次遇到同样的问题,直接使用存储过程就可以了,就不需要再重新写一遍 SQL 了,这就极大的提高了工作效率。
2. 如何使用存储过程?
使用存储过程需要:1)先定义存储过程 2)使用已经定义好的存储过程。
(1)无参数的存储过程
定义存储过程的语法形式:
create procedure 存储过程名称()
语法里的 begin…end 用于表示 sql 语句的开始和结束。语法里面的
sql 语句是:
把这个 sql 语句放入存储过程的语法里,并给这个存储过程起个名字叫做就 a_stuent1:
create procedure a_stuent1()
在 navicat 里允许以后,建立的存储过程就会在下图的地方:

下次使用存储过程的用下面 sql 语句就可以,就不需要重新写一遍 sql 了。
call 存储过程名称();
(2)有参数的存储过程 **
前面的存储过程名称后面是 (),括号里面没有参数。当括号里面有参数时,就是下面的语法:
create procedure 存储过程名称(参数1,参数2,...)
通过一个案例看下,现在要在 “学生表” 里查找出指定学号的学生姓名。如果指定学号是 0001,那么 sql 语句是:
现在问题来了,一开始不知道指定学号是哪一个,只有使用的时候才知道业务需求。比如今天要查找学号 0001,明天要查找学号 002。这时候就需要用到参数,来灵活应对这种情况。把 sql 语句放入存储过程语法里就是:
create procedure getNum(num varchar(100))
其中 getNum 是存储过程的名称,后面括号里面的 num varchar(100) 是参数,参数由 2 部分组成:参数名称是 num;参数类型是是 varchar(100),这里表示是字符串类型。
存储过程里面的 sql 语句(where 学号 = num)使用了这个参数 num。这样在使用存储过程的时候,给定参数的值就可以灵活的按业务需求来查询了。
比如现在要查询学号 = 0001 的学生姓名,那么就在使用存储过程的参数中给出学号的值,也就是下面括号里的 0001:
call getNum(0001);
3. 有哪些注意事项
1)定义存储过程语法里的 SQL 语句代码块必须是完整的 sql 语句,必须用 “;” 结尾
create procedure 存储过程名称(参数1,参数2,...)
2)定义不同的存储过程,要使用不同的存储过程名称,相同的存储过程的名字会引起系统报错。
4. 存储过程有什么用?

如果业务比较复杂、重复性工作比较多,存储过程会比较实用。
把重复要做的事情整理成一步一步的业务步骤,然后把业务步骤写成 sql 语句,然后再把 sql 语句写到存储过程的语法里。就像自动驾驶一样,把可能遇到的状况提前规划好,就不需要自己操纵方向盘,车子就按照我们写的步骤向前开了。
参考文章:
https://blog.csdn.net/yangzhongblog/article/details/105283541
SQL语言:存储过程 - 一一哥的文章 - 知乎 https://zhuanlan.zhihu.com/p/71070137
