在学习了数据库这门课之后,对其产生了浓厚的兴趣,之前一直使用的是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
- 这只是一个最简单的存储过程的入门,因为我也是刚刚开始,以后会慢慢带来更加深入的讲解