什么是存储过程?
是存储在数据库服务器的一组sql语句,通过在查询中调用某个指定的名称来执行,类似于封装了一组命令的函数
为什么要使用存储过程?
优点:
一致性:不同的语言开发完成相同的数据库操作写入存储过程就可以减少重复代码(可重用)
高性能:在团队开发中如果很有经验的员工来进行存储过程的编写,就可以很好的提高效率
安全性:有一些特定的开发要求权限控制,使用存储过程就能够确保开发人员只能访问任务所必须的信息
架构性:使用存储过程和数据层进行操作可以进一步增强大型应用应用程序的管理性
缺点:
从性能上来说,会消耗额外的内存资源
从功能上来说,使用其他语言来构建存储过程会更方便,如:php
从维护性上来说,更换数据库服务器(sqlserver、mysql、orale、redis、mongodb...)会出现移植性的问题
如何创建存储过程?
存储过程和存储函数合称为存储例程
存储过程:支持增删改查等sql命令还可以设置能在程序外引用的参数
存储函数:只支持查询命令的执行,只接受输入参数,并且必须要返回一个值
创建存储过程的结构:
create procedure 存储过程名(参数)
SQL语言
存储存储函数的结构:
create function 存储函数名(参数)
return type---返回类型
SQL语句
存储过程中的参数:
in 只用来向存储过程传递信息
out 只用来从存储过程传回信息
inout 可以向存储过程传递信息,如果值改变,则可以再从存储外调用
声明和设置变量
声明变量:declare 变量名 变量类型[默认值]
设置变量:set 变量名=值[,变量名=值]
select 列名 into 变量名 from 表名 where 条件
执行存储过程
call 存储过程名(参数)
创建多条语句的存储过程
begin和end语句块
条件
if-elseif-else和case
语法结构:
if 条件 then 语句
elseif 条件 then 语句
else 语句
end if
case
when 条件 then 语句
when 条件 then 语句
...
else 语句
end case
迭代
iterate、leave、loop、repeat
leave类似于java中的break语句
语法结构:
loop类似于for循环
[begin_lable:]loop
执行语句
end loop[end_lable]
repeat类似于do-while循环
[begin_lable:]repeat
执行语句
until 条件
end repeat[end_lable]
while语句
[begin_lable:]while 条件 do
执行语句
end while[end_lable]
修改存储过程
alter (procedure|function) 过程(函数)名 修改的内容
删除存储过程
drop (procedure|function)[if exists] 过程(函数)名