1、存储过程
1.1 存储过程的基本概念
1.1.1 概念
-
存储过程是一组为了完成某项特定功能的SQL语句集, 其实质就是一段存储在数据库中的代码。 它可以由声明式的sql语句和过程式sql语句组成。
1.1.2 优点(好处)
-
可增强SQL语言的功能和灵活性
-
良好的封装性
-
高性能
-
可减少网络流量
-
可作为一种安全机制来确保数据库的安全性和数据的完整性
1.2 创建存储过程
1.2.1 用户定义的结束符(delimiter命令)
-
delimiter $$ ($$—>用户定义的结束符)
-
示例:将mysql结束符修改为两个感叹号"!!" mysql>delimiter !!
-
示例:回到";"结束 mysql>delimiter ;
1.2.2 使用CREATE PROCEDURE语句创建存储过程
CREATE PROCEDURE sp_name([proc_parameter[,…]]) routine_body [IN |OUT | INOUT] param_name type
-
sp_name:指定存储过程的名称,默认在当前数据库中创建
-
proc_paramete:指定存储过程的参数列表
-
routine_body:存储过程的主体部分,也称为存储过程体
-
param_name:参数名
-
type:参数的类型
1.2.3 练习
1.3 存储过程体
1.3.1 使用DECLARE语句声明局部变量
DECLARE var_name[,…] type [DEFAULT value]
-
var_name:指定局部变量的名称
-
type:指定局部变量的数据类型
-
default value:局部变量指定一个默认值
-
示例:声明一个整型局部变量cid. declare cid int(10);
1.3.2 使用DECLARE语句声明局部变量注意事项
-
1)只能在存储过程体的BEGIN…END语句块中声明;
-
2)必须在存储过程的开头处声明;
-
3)作用范围仅限于声明它的BEGIN…END语句块;
-
4)不同于用户变量.
1.3.3 局部变量与用户变量的区别
-
1)局部变量声明时,在其前面没有@符号,并且它只能 被声明它的BEGIN…END语句块中的语句所使用;
-
2)用户变量在声明时,会在其名称前面使用@符号,同 时已声明的用户变量存在于整个会话之中。
1.3.4 使用SET语句为局部变量赋值
-
SET var_name=expr[,var_name=expr]…
-
示例:为局部变量cid赋予一个整数值910. set cid=910;
1.3.5 使用SELECT…INTO语句把选定列的值直接存储到局部变量中
1.3.6 流程控制语句
1)条件判断语句
• IF…THEN …ELSE语句
• IF 条件 THEN 表达式1 ELSE 表达式2 END IF;
• CASE语句
2)循环语句
• WHILE语句
• while 条件 表达式 END while
• REPEAT语句
• repeat 表达式 END repeat
• LOOP语句
• loop 表达式 END loop
3)ITERATE语句
• 用于表示退出当前循环
1.3.7 使用DECLARE CURSOR语句创建游标
DECLARE cursor_name CURSOR FOR select_statement
-
cursor_name:指定要创建的游标的名称
1.3.8 使用OPEN语句打开游标
OPEN cursor_name
-
cursor_name:指定要打开的游标
1.3.9 使用FETCH…INTO语句读取游标
FETCH cursor_name INTO var_name[,var_name] …
-
cursor_name:指定已打开的游标
-
var_name:指定存放数据的变量名
1.3.10 使用CLOSE语句关闭游标
CLOSE cursor_name
-
cursor_name:用于要关闭的游标
1.3.11 总结
1.4 调用存储过程
1.4.1 使用CALL语句调用存储过程
-
sp_name:指定被调用的存储过程的名称
-
parameter:指定调用存储过程所要使用的参数
1.4.2 练习
1.5 删除存储过程
1.5.1使用DROP PROCEDURE语句删除存储过程
DROP PROCEDURE[IF EXISTS] sp_name
-
sp_name:指定要删除的存储过程的名称
1.6 总结
2、存储函数
2.1 什么是存储函数
2.2 创建存储函数
2.2.1 使用CREATE FUNCTION语句创建存储函数
CREATE FUNCTION sp_name([func_parameter[,…]]) RETURNS type routine_body
-
sp_name:指定存储函数的名称
-
func_parameter:指定存储函数的参数
-
RETURNS type :声明存储函数返回值的数据类型; type指定返回值的数据类型
-
routine_body :指定存储函数的主体部分,也称为存储函数体
2.2.2 练习
2.3 调用存储函数
2.3.1 使用关键字SELECT调用存储函数
-
SELECT sp_name([func_parameter[, …]])
2.4 删除存储函数
2.4.1 使用DROP FUNCTION语句删除存储函数
-
DROP FUNCTION [IF EXISTS] sp_name