您的位置:首页 > 数据库 > MySQL

MySQL 存储过程探秘

2016-06-25 13:30 447 查看
关于存储过程的优点,本文不再阐述。这里只是对创建存储过程时可能遇到的问题做一下简单的分析。

必备基础

这里说的基础,是相关于如何创建一个存储过程的。

DELIMITER:分隔符,定界符。

作用就是:作为命令执行的分隔,例如我们平时使用的
;
号。我们可以使用delimiter来手动的更改它。

PROCEDURE : 创建存储过程的关键字。类似于Table,以及View等。

SHOW PROCEDURE STATUS 或者 SHOW PROCEDURE STATUS WHERE DB=’TARGET DATABASE NAME’

show出创建的存储过程,便于进行浏览。

变量的使用及参数相关:这些都是基础,在这里就不

重复的造轮子。

示例

先直接看一个例子吧。

mysql> use practice;
Database changed

mysql> show tables;
+--------------------+
| Tables_in_practice |
+--------------------+
| user               |
| userinfo           |
+--------------------+
2 rows in set (0.00 sec)

mysql> select * from user;
+----+--------+
| id | number |
+----+--------+
|  1 |     11 |
|  2 |     22 |
|  3 |     33 |
|  4 |     44 |
|  5 |     55 |
+----+--------+
5 rows in set (0.00 sec)

# 开始存储过程的创建 #
mysql> delimiter $
mysql> drop procedure if exists hi;
-> create procedure hi()
-> begin
-> select * from user;
-> end$
Query OK, 0 rows affected (0.04 sec)

Query OK, 0 rows affected (0.04 sec)


调用存储过程同样很简单。

mysql> call hi()$
+----+--------+
| id | number |
+----+--------+
|  1 |     11 |
|  2 |     22 |
|  3 |     33 |
|  4 |     44 |
|  5 |     55 |
+----+--------+
5 rows in set (0.00 sec)


案例分析

想必大家会很奇怪,因为

call hi()$

为什么不是’;’号呢?

这里其实我前面已经讲过了,那就是使用DELIMITER可以动态的更改我们的命令执行结束符号。由于在创建存储过程的时候会有很多条SQL语句出现,所以为了不冲突,就将结束符改成了
$
了。

我们也可以改过来,如下:

mysql> delimiter ;
mysql> call hi();
+----+--------+
| id | number |
+----+--------+
|  1 |     11 |
|  2 |     22 |
|  3 |     33 |
|  4 |     44 |
|  5 |     55 |
+----+--------+
5 rows in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)


是不是又恢复正常了呢?

需要注意

我在使用存储过程的时候,发现打开终端如果直接创建存储过程的时候,是不能创建的。因为我们必须要先选择一个数据库,然后才能创建一个存储过程。

然后就是存储过程是全局显示的,虽然其是存在于某一个特定的数据库中。

创建存储过程的时候,要先判断命名空间之下的重名否?否则后悔也来不及的。

简单的介绍大致就是这些了。比较简单,但是却非常的重要。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: