文章目录
1.什么是存储过程和函数
1.存储过程和函数是实现经过编译并被存储在数据库中的一段sql语句集合。
2.函数具有返回值,存储过程无返回值。
3.存储过程和函数是为了减少数据在客户端和服务器之间的传输,提高了运行的效率。
2.存储过程和函数的相关操作
2.1 存储过程和函数的创建
# 存储过程
create procedure sp_name([[in|out|inout] param_name p_type],)
[characteristic...]
begin
sql statement...
end
# 函数
create function sp_name([[in|out|inout] param_name p_type])
returns type
[characteristic...]
begin
sql statement...
end
# 调用
call sp_name(param,)
2.2 删除存储过程和函数
drop [procedure | function] sp_name;
2.3 查看存储过程和函数的信息
# 查看状态
show [procedure | function] status like 'pattern';
# 查看定义
show create [procedure | function] sp_name;
# 通过查找系统定义的表
select * from routines where ROUTINE_NAME = 'selectById';
3.变量的使用
变量是不区分大小写的.
3.1 变量的定义
declare var_name[,...] type [default d_value]
3.2 变量的赋值
set var_name = `value`;
select `value` into var_name;
4. 条件的定义和处理
类似于Java中的异常处理机制,MySQL中,对可能事先出现的异常(主键重复等等)进行条件定义,然后在条件处理中针对指定的条件进行处理。
- 条件定义
declare condtion_name condition condition_value
conditon_value:
mysql_error_code | SQLSTATE [VALUE] sqlstate_value
- 条件处理
declare handler_type handler for condition_value[,...] sp_state_ment;
condtion_value :
condtion_name | sql_error_code | ...
handler_typt :
continue | exit
# continue : 继续执行
# exit : 退出
5. 流程控制语句
5.1 if语句
if condtion then statement_list
elseif conditino statement_list
...
else statement
end if
5.2 CASE语句
case case_value
when when_value then ...
when when_value then ...
else ...
case
when condtion then ..
when conditon then ..
else ...
end case
5.3 loop循环
loop_lable:loop
....
....
....
leave loop_lable;
end loop
5.4 iterate
类似于continue,跳过当前循环继续下一层循环
iterate loop_lable;
5.5 repeat
类似do while。常与cursor一起使用
repeat
fetch cur_name into ...
....
until 0 end repeat
5.6 while
[begin_lable:] while condition do
...
end while [end_lable]
6.光标
- 定义光标
declare cur_name cursor for statement
- 打开光标 open cur_name;
- 取光标中的数据
fetch cursor_name into var_name [, var_name] ...
- 关闭光标 close cur_name;