zoukankan      html  css  js  c++  java
  • mysql 存储过程

     

    存储过程

    什么是存储过程??

    简单来说,存储过程就是为了以后使用而保存的一条或多条SQL语句的集合 .

    和我们编程语言中的函数这个概念比较像。

    在编程语言中,我们经常要完成某个功能,我们都会将它写成一个函数,然后在需要这个函数的时候调用它就好了。

    同样的道理,存储过程也是这样,我们首先先声明这个存储过程,在我们需要这个存储过程的时候,我们调用这个存储过程就行了。

    例如:在C语言中,我们想求两个数值a/b中的最大值。则我们可以写如下这样一个函数:

    int myMax(int a,int b){
        return a>b?a:b;
    }
    

    在main函数中相应的位置调用即可。

    int main(void){
        int a,b;
        scanf("%d%d",&a,&b);
        int maxValue=myMax(a,b);//调用
        printf("max  value %d",maxValue);
    }
    

    存储过程的定义和调用上面函数的定义是类似的。

    存储过程的定义中,也可以有输入参数,也可以有返回值。下面我们介绍下存储过程的定义和调用。

    还是以例子来进行说明:

    在student表中的最后一列为学生成绩score,现在我们想为成绩写一个存储过程,以供以后一直使用。

    在命令行应该这样来创建和调用如下:

    delimiter //          改变MySQL语句的结束分隔符为//
        create procedure p_scoreAvg()
        begin
            select avg(score) as avg_score from student;
        end //
    delimiter ;  恢复MySQL语句的结束分隔符为分号
    

    注: 
    1、这里最要注意的是开始和结束位置的delimiter //和delimiter ;这两句,delimiter是分隔符的意思,由于MySQL默认的是以”;”z作为分隔符,而存储过程中会出现分号作为语句的一部分,如果我们之前不改变分隔符的号,MySQL还是会以分号作为语句分隔符结束。分隔符除了,其它的符号都可以作为分隔符,例如 $$

    2、存储过程可以有输入参数,输出参数,也可以都没有,但是存储过程名后面的一对圆括号是不能少的。这一点和编程语言中的函数一致。

    3、存储过程的过程体开始与结束使用begin和end进行标识。

    上面就定义了一个无输入参数,也没有返回值的存储过程,调用此存储过程的方法如下:

    call p_scoreAvg();
    

    下面分别举一个既有输入也有输出的例子。

    在举例子之前,我student2表中,插入了一些数据,这次是借助于SQLyog工具来做的,确实方便多了。

    现在我们想根据学生的学号来得到学生的各科成绩以平均成绩。存储过程如下:

    有了如上的存储过程之后,调用方法如下:

    call p_student1(1,@avgScore);
    select @avgScore;//显示出变量avgScore的值
    

    在SQLyog中实践如下:

    下面将讲解下存储过程的参数: 
    共有三种参数,形如:

    create procedure ([IN|OUT|INOUT] 参数名 数据类型)

    1、IN 输入参数

    2、OUT 输出参数,可以被返回

    3、INOUT 输入输出参数

    MySQL存储过程的调用 
    用call和你过程名以及一个括号,括号里面根据需要,加入参数,参数包括输入参数、输出参数、输入输出参数。具体如下:

    call procedure_name();//如果有参数,传入参数即可。
    call procedure_name(@p1,@p2);//参数都是以@开头
    

    变量

    变量定义

    DECLARE variable_name [,variable_name …] datatype [DEFAULT value];

    其中datatype为MySQL的数据类型,如INT 、DECIMAL VARCHAR(length)等;

    变量赋值

    set varible_name=expression;

    用户变量

    1、在MySQL客户端使用用户变量

    主要有select 和set为变量赋值:

    例如:当有如下的存储过程:

    当调用时,可以给输入参数作为一个变量,如下:

    SET @id=1;//变量
    CALL p_student1(@id,@avgScore);
    SELECT @avgScore;
    

    注意:用户变量名一般以@开头

    存储过程中条件语句的应用

    前面一直强调MySQL中的存储过程和其它编程语言中的函数类似,因此像IF-ELSE CASE WHILE 等都可以应用于存储过程中。 
    下面将分别举例来进行讲解。

    IF ELSE的应用

    CASE 的应用

    上面就是关于case的用法,语法目前还不怎么熟悉,写起来怪怪的。

    while的应用

    调用后的结果如下:

    上面只是简单的介绍了下IF-ELSE 、WHILE 、case的用法。存储过程还支持许多其他的语法。如:repeat等

    删除存储过程

    在MySQL中删除都是用DROP 来做。

    因此,删除存储过程的命令如下:

    drop procedure  pro_name;
    

    使用存储过程的优点

    和编程语言中使用的函数一样优点类似,模块化、重用等。

     转载自:https://www.cnblogs.com/zuochuang/p/7264085.html
     
  • 相关阅读:
    java数的相加
    读大道至简第二章有感
    读大道至简第一章有感
    课题的跨专业组队
    返回一个整数数组中最大子数组的和。
    《构建之法》阅读笔记02
    单元测试(2)
    软件工程个人作业03
    单元测试
    团队
  • 原文地址:https://www.cnblogs.com/myJuly/p/10006200.html
Copyright © 2011-2022 走看看