Mysql存储过程和存储函数
存储过程:一条或者多条sql语句
创建存储过程 CREATE PROCEDURE
CREATE PROCEDURE 存储过程名([proc_parameter]) [characteristics] routime_body
proc_parameter是指定存储过程的参数列表,可以这么写 [IN|OUT|INOUT] param_name type,IN输入参数,OUT输出参数,INOUT即可输入也可输入,param_name参数名 type参数类型
characteristics表示存储过程的特性
routime_body表示sql代码 用begin和end括起来
CREATE PROCEDURE avgMonet(IN persionname VARCHAR(255),out sumMoney double) BEGIN select sum(personMoney) INTO sumMoney From person where name=persionname; END
获取名叫persionname的所有数据行,然后把他们的工资全部加起来赋给sumMoney
使用 CALL 来调用存储过程
CALL sp_name(parameter1,parameter2,.....)
输出变量的返回值
在存储过程中我们可以使用declare来定义局部变量
DECLARE var_name1[,var_name2,......] data_type [Default vaue]
可以定义一个或者多个变量名
可以赋值,也可以使用默认值(NULL),之后使用set来进行赋值
DECLARE a1 int DEFAULT 1; DECLARE a1,a2,a3 int ; SET a1=1,a2=2,a3=3;
Select语句也能给Declare赋值
存储函数:
创建存储函数 CREATE FUNCTION
CREATE FUNCTION func_name([func_parameter]) RETURNs type
[characteristics] routime_body
参数默认IN
参数和存储过程意思一样但不用begin和end表示 用return
CREATE FUNCTION nameById(persionid INT) RETURNS varchar(255) DETERMINISTIC return(select name from person where id = persionid);
DETERMINISTIC 不确定的,同样的还有
NO SQL 没有SQl语句,当然也不会修改数据
READS SQL DATA 只是读取数据,当然也不会修改数据
MODIFIES SQL DATA 要修改数据
CONTAINS SQL 包含了SQL语句
function里面支持DETERMINISTIC, NO SQL 和 READS SQL DATA
ps.这里不加DETERMINISTIC会报错
报错原因是 因为启用了bin-log
然后查了查(还没有仔细去看) bin-log 大概理解就是数据库用来保存每一次操作的日志----->说白了就是害怕万一有一天某个人删库跑路了,通过bin-log的记录可以恢复数据
、
通过引用函数名来使用
select func_name;
游标
当我们的查询语句 查询出了很多的结果,此时就需要我们在结果集中使用游标来读取记录,根据需要来获取其中的一条记录
游标的定义
DECLARE cursor_name CURSOR FOR select_statement
cursor_name 游标名
select_statement 查询结果集
游标的使用
FETCH cursor_name INTO var_name [, var_name,......]{参数名称}
关闭游标
FETCH cursor_name INTO var_name [, var_name,.....] {参数名称}
查看存储过程存储函数状态
SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']
LIKE 'pattern' 匹配存储函数名称或者存储过程名称
查看存储过程存储函数的定义
SHOW CREATE {PROCEDURE| FUNCTION} sp_name
删除存储过程和存储函数
DROP {PROCEDURE | FUNCTION}[if exists] sp_name
---------------------------------还有许多不足的地方,会继续学习下去--------------------------------------------------