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

 

---------------------------------还有许多不足的地方,会继续学习下去--------------------------------------------------

 

posted @ 2019-06-16 15:43  义乂义乂义乂  阅读(236)  评论(0编辑  收藏  举报