
文章插图
面试中有时候会问:存储过程有什么用?看了今天的知识,你就知道如何回答了 。
1.存储过程是什么?
假如你每天要开车完成一些列重复的操作:车钥匙启动车,倒车 。现在出现了一款新车,可以自动的完成这些重复的工作 。每次你上车以后,车就自动帮助你倒出来了 。

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

文章插图
下次使用存储过程的用下面sql语句就可以,就不需要重新写一遍sql了 。
call 存储过程名称();
(2)有参数的存储过程
前面的存储过程名称后面是(),括号里面没有参数 。当括号里面有参数时,就是下面的语法:
create procedure 存储过程名称(参数1,参数2,...)begin;end;
通过一个案例看下,现在要在“学生表”里查找出指定学号的学生姓名 。如果指定学号是0001,那么sql语句是:
select 姓名 from 学生表where 学号='0001';
现在问题来了,一开始不知道指定学号是哪一个,只有使用的时候才知道业务需求 。比如今天要查找学号0001,明天要查找学号002 。这时候就需要用到参数,来灵活应对这种情况 。把sql语句放入存储过程语法里就是:
create procedure getNum(num varchar(100))begin select 姓名 from 学生表where 学号=num;end;
其中getNum是存储过程的名称,后面括号里面的num varchar(100)是参数,参数由2部分组成:参数名称是num;参数类型是是varchar(100),这里表示是字符串类型 。
存储过程里面的sql语句(where 学号=num)使用了这个参数num 。这样在使用存储过程的时候,给定参数的值就可以灵活的按业务需求来查询了 。
比如现在要查询学号=0001的学生姓名,那么就在使用存储过程的参数中给出学号的值,也就是下面括号里的0001:
call getNum(0001);
3)默认参数的存储过程
前面的存储过程名称后面是(参数1,参数2),括号里面只包含参数的类型和名字,方便调用 。
存储过程还一种情况是有默认参数,是下面的语法 。
in 输入参数:参数初始值在存储过程前被指定为默认值,在存储过程中修改该参数的值不能被返回 。

文章插图
out输出参数:参数初始值为空,该值可在存储过程内部被改变,并可返回

文章插图
inout输入输出参数:参数初始值在存储过程前被指定为默认值,并且可在存储过程中被改变和在调用完毕后可被返回

文章插图
3.有哪些注意事项
1)定义存储过程语法里的SQL语句代码块必须是完整的sql语句,必须用“;”结尾
- 香菇冷库安装后如何存储香菇 新鲜香菇怎么保存
- 竹子的生长过程 竹子的样子
- 红葡萄酒的酿造过程
- 气泡酒的酿造全过程|气泡酒酿造大揭秘
- 【游戏世界】《三国志11》游戏历史变化过程
- 细说758洪灾亲历及过程 758大洪水
- 自酿葡萄酒的步骤与注意事项 葡萄酒的做法自酿全过程需注意
- 白酒酿造全过程 白酒酿造技术
- 【游戏世界】艾尔登法环:13座魔法师塔位置及详细破解过程(三姐妹+监视塔)
- 神十三回家倒计时,着陆场搜救演练,此次返回过程有一个看点