MySQL 存储过程探秘
2016-06-25 13:30
447 查看
关于存储过程的优点,本文不再阐述。这里只是对创建存储过程时可能遇到的问题做一下简单的分析。
DELIMITER:分隔符,定界符。
作用就是:作为命令执行的分隔,例如我们平时使用的
PROCEDURE : 创建存储过程的关键字。类似于Table,以及View等。
SHOW PROCEDURE STATUS 或者 SHOW PROCEDURE STATUS WHERE DB=’TARGET DATABASE NAME’
show出创建的存储过程,便于进行浏览。
变量的使用及参数相关:这些都是基础,在这里就不
重复的造轮子。
调用存储过程同样很简单。
call hi()$
为什么不是’;’号呢?
这里其实我前面已经讲过了,那就是使用DELIMITER可以动态的更改我们的命令执行结束符号。由于在创建存储过程的时候会有很多条SQL语句出现,所以为了不冲突,就将结束符改成了
我们也可以改过来,如下:
是不是又恢复正常了呢?
然后就是存储过程是全局显示的,虽然其是存在于某一个特定的数据库中。
创建存储过程的时候,要先判断命名空间之下的重名否?否则后悔也来不及的。
简单的介绍大致就是这些了。比较简单,但是却非常的重要。
必备基础
这里说的基础,是相关于如何创建一个存储过程的。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)
是不是又恢复正常了呢?
需要注意
我在使用存储过程的时候,发现打开终端如果直接创建存储过程的时候,是不能创建的。因为我们必须要先选择一个数据库,然后才能创建一个存储过程。然后就是存储过程是全局显示的,虽然其是存在于某一个特定的数据库中。
创建存储过程的时候,要先判断命名空间之下的重名否?否则后悔也来不及的。
简单的介绍大致就是这些了。比较简单,但是却非常的重要。
相关文章推荐
- MySQL 存储过程探秘
- MySQL中多表删除方法(转载)
- mysql主从复制
- mysql配置优化
- mysql二进制日志设置
- MYSQL---数据库中表的操作
- MySQL Server 5.6
- MySQL Server 5.0 my.ini配置详解
- MYSQL-----数据库的操作及存储引擎的选择
- MySQL的CAST函数用法
- mysql中char,varchar与text类型的区别和选用
- Mysql5.6.17 zip版本安装
- mysql数据库备份
- MySQL安装(以程序的方式启动)zip版
- Mysql 数据库的数据大小查看:
- MySQL join查询分类
- 公司mysql数据库设计与优化培训ppt
- MySQL 5.6 for Windows 解压缩版配置安装
- mysql介绍
- mysql实现合并同一ID对应多条数据的方法