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