• mysql存储过程学习笔记


    1.      存储过程简介

    我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

    一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

    存储过程通常有以下优点:

    (1).存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

    (2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

    (3).存储过程能实现较快的执行速度。

    2.      关于MySQL的存储过程

    存储过程是数据库存储的一个重要的功能,但是MySQL5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。

    3.      MySQL存储过程创建

    MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,...]])
    [
    特性 ...] 过程体
     

    这里先举个例子:

     DELIMITER 
        CREATE PROCEDURE proc1(OUT s int)  
            BEGIN 
                SELECT COUNT(*) INTO s FROM user;  
            END 
    
    DELIMITER ; 

    注:

    1)这里需要注意的是DELIMITER //DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

    2)存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。

    3)过程体的开始与结束使用BEGINEND进行标识。 

    参数

    MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:

    CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...])

    IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

    OUT 输出参数:该值可在存储过程内部被改变,并可返回

    INOUT 输入输出参数:调用时指定,并且可被改变和返回

    变量

    . 变量定义

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

    其中,datatypeMySQL的数据类型,如:int, float, date, varchar(length)

    例如:

    1. DECLARE l_int int unsigned default 4000000;  
    2. DECLARE l_numeric number(8,2) DEFAULT 9.95;  
    3. DECLARE l_date date DEFAULT '1999-12-31';  
    4. DECLARE l_datetime datetime DEFAULT '1999-12-31 23:59:59';  
    5. DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded';    

    . 变量赋值

     SET 变量名 = 表达式值 [,variable_name = expression ...]

    用户变量:

    用户变量名一般以@开头

    1. SELECT 'Hello World' into @x;  
      SELECT @x;  

    MySQL存储过程的调用

    call和你过程名以及一个括号,括号里面根据需要,加入参数,参数包括输入参数、输出参数、输入输出参数。具体的调用方法可以参看上面的例子。

    MySQL存储过程的修改

    用ALTER PROCEDURE更改,用CREATE PROCEDURE 建立。

     MySQL存储过程的删除

    DROP PROCEDURE

    条件语句

    . if-then -else语句

        DELIMITER 
         CREATE PROCEDURE proc2(IN parameter int)  
             begin 
             declare var int;  
             set var=parameter+1;  
             if var=0 then 
                 insert into t values(17);  
             end if;  
             if parameter=0 then 
                 update t set s1=s1+1;  
             else 
                 update t set s1=s1+2;  
             end if;  
             end;  
        DELIMITER ;         

    . case语句:

        DELIMITER   
        CREATE PROCEDURE proc3 (in parameter int)  
         begin 
             declare var int;  
             set var=parameter+1;  
             case var  
             when 0 then   
                 insert into t values(17);  
             when 1 then   
                  insert into t values(18);  
              else   
                  insert into t values(19);  
              end case;  
         end;  
    
     DELIMITER ;     

    循环语句

    . while ···· end while

  • 相关阅读:
    《DSP using MATLAB》Problem 7.16
    《DSP using MATLAB》Problem 7.15
    《DSP using MATLAB》Problem 7.14
    线性基
    P2476-记忆化搜索
    树状数组(板子)
    Codeforces Round #633 (Div. 2) C. Powered Addition
    Codeforces Round #633 (Div. 2) B. Sorted Adjacent Differences
    思维,暴力,打表
    RMQ倍增板子(区间最值查询问题)(静态)
  • 原文地址:https://www.cnblogs.com/suncj/p/4693897.html
Copyright © 2020-2023  润新知