MySQL进阶8
存储过程:
一组可编程的函数,是为了完成特定功能的sql语句集
经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行
存储过程就是具有名字的一段代码,用来完成一个特定的功能
创建的存储过程保存在数据库的数据字典中
用存储过程的好处:
将重复性很高的一些操作封装到一个存储过程中简化了对这些sql的调用
批量处理
统一接口,确保数据安全
相对于oracle数据库来说,mysql的存储过程相对功能较弱,使用较少
存储过程的创建和调用:
delimiter $$:
它与存储过程语法无关
delimiter语句将标准分隔符-分号(;)更改为$$
因为我们想将存储过程作为整体传递给服务器,而不是让mysql工具一次解释每个语句
告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了,默认情况下delimiter是分号;,在命令行客户端中如果有一段命令以分号结束那么回车后mysql将会执行该命令,但有时候不希望mysql这么做,在位可能输入较多的语句且语句中包含有分号,使用delimiter $$,这样只有当$$出现之后mysql解释器才会执行该段语句
创建存储过程:
create procedure 名称()
begin
语句
end $$
调用存储过程:
call 名称();
删除存储过程:
drop procedure 名称;
存储过程变量:
在存储过程中声明一个变量
使用declare语句:
declare 变量名 数据类型(大小) default 默认值;
可以声明一个名为total_sale的变量,数据类型为int,默认值为0
declare total_sale int default 0;
声明共享数据类型的两个或多个变量
declare x, y int default 0;
分配变量值:
要为变量分配一个值,可以使用set语句
set total_count = 10;
使用select into语句将查询的结果分配给一个变量
select count(*) into total_products from products;
变量的范围:
如果在存储过程中声明一个变量,那么当达到存储过程的end语句时,它将超出范围,因此在其他代码块中无法访问
存储过程参数:
三种类型:
in:表示调用者向过程传入值(传入值可以是字面或变量)
out:表示过程向调用者传出值
inout:inout参数是in和out参数的组合
定义参数:
create produce name(模式,参数名称 数据类型(大小))
存储过程语句:
if语句:
if expression then
statements;
end if;
或
if expression then
statements;
else
else_statmemts;
end if;
case语句:
case case_expression
when when_expression_1 then commands
when when_expression_2 then commands
...
else commands
end case;
循环:
while expression do
statments
end while
或
repeat
statments;
until expression
end repeat
查看存储过程:
查看所有存储过程:
show procedure status;
查看指定数据库的存储过程
show procedure status where db=数据库名;
查看指定存储过程源代码
show create procedure 存储过程名;