mysql之存储过程

Posted _小溢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql之存储过程相关的知识,希望对你有一定的参考价值。

 

 

 

 

1.存储过程

1.1体会封装

(1)创建一个存储过程

create PROCEDURE p1() -- 声明一个存储过程,begin和end之间就是sql语句的集合。
BEGIN
    insert into goods VALUES(null, \'why\', \'50\');
    select * from goods;
END

(2)调用存储过程,之后想要使用begin和end之间的sql语句,就可以像调函数一样使用

-- 调用存储过程,执行了创建存储过程时begin和end之间的语句
call p1();

1.2体会参数

(1)

-- 三个参数类型
    -- in 表示参数只能传进来,输入型参数
    -- out 表示输出型参数
    -- inout 表示输入输出型参数
-- 默认不给参数参数类型则是in输入型参数
create PROCEDURE p2(in i int, inout names VARCHAR(50)) -- 声明一个存储过程,带参数的,in表示输入型参数,i为参数名,int为i这个参数的数据类型
BEGIN                                                                                                    -- 参数2:inout表示输入输出型参数,names是参数名,varchar(50)表示names这个参数的数据类型是字符串格式的长度最长为50
    update goods set name = names where id = i;
    select names;    -- 查询看一下names这个变量的值
   select name into names from goods where id = 1; -- into的意思是将查询出来的name值赋值给names这个变量
END set @names = \'大鹅\'; -- 定义一个变量names,赋值为大鹅,目的是给下面的调用用 call p2(4, @names); -- 调用p2这个存储过程,因为第二个参数是inout输入输出型参数,所以一定要进来一个之前被set过的变量,并加@,其实就像C语言中的指针。 select @names; -- 查看一下这个names参数被带出来的值 大鹅

 

 (2)into关键字只能将查询出来的一个值赋值给一个变量,不能查询出来多个赋值给多个变量

 1.3体会控制

-- 如果flag为true则查询goods表中比nums小商品记录
-- 如果flag为false则查询goods表中比nums大的商品记录
-- if 条件结束后要加end if,判断是否相等要用=号而不是==
create PROCEDURE p(int flag char(5), in nums int)
BEGIN
    if flag = \'true\' THEN
        select * from goods where num < nums;
    ELSEIF flag = \'false\' THEN
        select * from goods where num > nums;
    ELSE
        select * from goods;
    end if;
END


call p(\'true\', 20);

 

1.4 体会循环,使用存储过程做1 ~ 100的累加和

create PROCEDURE p4(in count int, out result_sum int)
BEGIN
        declare i int DEFAULT 0; -- 使用declare声明一个变量i,默认值是0
        DECLARE sum int;
        set sum = 0;    -- 使用set设置sum这个变量的值为0
        while i <= count DO
            set sum = sum + i;
            set i = i + 1;
        end WHILE;
        set result_sum = sum;    -- 设置result_sum = sum
END

set he = 0;
call p4(100, @he);
select @he;

1.5查看和删除存储过程

show PROCEDURE status; -- 查看当前创建的存储过程

drop PROCEDURE p4;    -- 删除p4存储过程

如果存储过程写错了,在命令行下只能删除这个存储过程,然后在重新创建一个来达到修改的目的。如果是在Navicat for mysql可视化ide中,则可以在函数中,设计函数来改存储过程的逻辑代码。

 

 

 

存储过程建议sql语句在几百行左右才会用,并且跟账目相关的特别严谨的才会用到存储过程,普通的项目应该是用不到

 

以上是关于mysql之存储过程的主要内容,如果未能解决你的问题,请参考以下文章

MySQL存储过程之事务管理

MYSQL进阶学习笔记四:MySQL存储过程之定义条件,处理过程及存储过程的管理!(视频序号:进阶_11,12)

MySQL之存储过程实例讲解(创建调用查看修改删除)

mysql存储过程之事务篇

MySQL之存储过程

MySQL之存储过程