从零开始写MySql存储过程(一)

在学习了数据库这门课之后,对其产生了浓厚的兴趣,之前一直使用的是Oracle数据库的小黑框进行数据库的相关操作,后来由于课程需求,用到了MySql,发现这个数据库比较轻量级,适合作为学习来使用

下面结合个人经历,将本人对存储过程的理解PO出来


  • 首先,什么是存储过程呢,可以理解为编程语言中的函数,将复杂的SQL操作进行封装,提供给外界参数接口,与C语言中的函数这个概念类似

mysql> mysql> DELIMITER //
mysql> CREATE PROCEDURE proc1(INOUT s int) 
    -> BEGIN
    -> SELECT COUNT(*) INTO s FROM Customers;
    -> END
    -> //
Query OK, 0 rows affected

mysql> DELIMITER ;

在这个示例当中,通过mysql的命令行界面进行编写,由于命令行界面以分号作为结束符,但是这在书写存储过程时不是很方便,,因为存储过程中如果还用分号作为分隔符号的话,那么当我们写下分号的时候,存储过程的创建会被结束,但这并不是我们想要的,所以通过 DELIMITER // 将默认的结束符设置为//

  • 随后我们开始进行存储过程正式的编写,第二行 CREATE PROCEDURE proc1中的proc1为该存储过程的名字,前面的CREATE PROCEDURE类似于CREATE TABLE
  • 括号中的对参数类型进行制定,

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

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

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

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

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

  • 随后在BEGIN  和END 中写入具体的SQL代码,在示例中对Customers表进行遍历,将总行数存入参数s中

  • 随后的//表示存储过程的编写结束

  • 最后再通过DELIMITER ; 将分隔符再改回去

  • 那么这段存储过程应该如何调用呢,在下面的例子中 首先 定义变量@numb的初值为0,然后通过call 存储过程名(@numb)进行调用,并把@numb作为参数传入,执行结束之后发现@numb的值变为5

  • mysql> set @numb=0;
    Query OK, 0 rows affected
    
    mysql> select @numb;
    +-------+
    | @numb |
    +-------+
    |     0 |
    +-------+
    1 row in set
    
    mysql> CALL proc1(@numb)  ; 
    Query OK, 1 row affected
    
    mysql> select @numb;
    +-------+
    | @numb |
    +-------+
    |     5 |
    +-------+
    1 row in set

  • 这只是一个最简单的存储过程的入门,因为我也是刚刚开始,以后会慢慢带来更加深入的讲解

你可能感兴趣的:(SQL)