-
存储过程
-
介绍
-
存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的
-
存储过程思想上很简单,就是数据库SQL语言层面代码的封装与重用(类似于函数)
-
-
操作
-
创建
-
create procedure 存储过程名称([参数列表] 参数名 参数类型) begin --SQL语句 END;
-
在命令行中,执行创建存储过程的SQL时,需要通过关键字delimiter指定SQL语句的结束符
-
-
-
调用
-
call 名称([参数]);
-
-
查看
-
查询指定数据库的存储过程及状态信息
-
select * from information_schema.routines where routine_schema='xxx';
-
-
查询某个存储过程的定义
-
show create proceduce;
-
-
-
-
变量
-
系统变量 是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)
-
查看系统变量
-
查看所有系统变量
-
show [session|global] variables;
-
-
可以通过like模糊匹配方式查找变量
-
show [ session|global] variables like '.......';
-
-
查看指定变量的值
-
select @@[session|global] 系统变量名;
-
-
-
设置系统变量
-
set [session|global] 系统变量名 = 值;
-
set @@[session|global]系统变量名 = 值;
-
-
注意:
-
如果没有指定session|global,默认是session,会话变量
-
mysql服务器重新启动之后,所设置的全局参数会失效,要想不失效,可以在/etc/my.cof 中配置
-
-
用户定义变量
-
是用户根据自己定义的变量,用户变量不用提前声明,在用的时候直接用"@变量名“使用就可以。其作用域为当前连接
-
赋值
-
set @var_name=exper [,@var_name = expr]...;
-
set @var_name:=exper [,@var_name = expr]...;
-
select @var_name:=exper [,@var_name = expr]...;
-
select 字段名 into @var_name from 表名;
-
-
使用
-
select @var_name;
-
-
-
局部变量
-
是根据需要定义的在局部生效的变量,访问之前,需要DECLARE声明。可用作存储过程内的局部变量和输入参数,局部变量的范围是在期内声明的BEGIN...END块
-
声明
-
declare 变量名 变量类型[default ...];
-
int
-
bigint
-
char
-
varchar
-
date
-
time
-
....
-
-
-
赋值
-
set 变量名 = 值;
-
set 变量名 := 值;
-
select 字段名 into 变量名 from 表名...;
-
-
-
-
参数
-
语法
-
游标
-
游标(cursor)是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、open、fetch和close。
-
声明游标
-
declare 游标名称 cursor for 查询语句;
-
-
打开游标
-
open 游标名称;
-
-
获取游标记录
-
fetch 游标名称 into 变量[,变量];
-
-
关闭游标
-
close 游标名称;
-
-
-
条件处理程序
-
条件处理程序(Handler)可以用来定义在流程控制结构执行过程中遇到问题时相应的处理步骤
-
declare handler_action handler for condition_value [,condition_value]... statement;
-
handler_action
-
continue:继续执行当前程序
-
exit:终止执行当前程序
-
-
condition_value
-
SQLSTATE sqlstate_value:状态码,如02000
-
SQLWARNING:所有以01开头的SQLSTATE代码的简写
-
NOT FOUND:所有以02开头的SQLSTATE代码的简写
-
-
SQLEXCEPTION:所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的简写
-
-
存储函数的参数
-
存储函数是有返回值的存储过程,存储函数的参数只能是IN类型的。
-
语法
-
create function 存储函数名称([参数列表]) returns type [characteristic...] begin --SQL语句 return ...; end;
-
characteristic说明:
-
deterministic:相同的输入参数总是产生相同的结果
-
no sql:不包含sql语句
-
reads sql data:包含读取数据的语句,但不包含写入数据的语句
-
-
-
-
-