码迷,mamicode.com
首页 > 数据库 > 详细

MYSQL 存储过程学习

时间:2015-08-25 12:21:22      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:mysql 存储过程

MYSQL 存储过程学习笔记

MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。

存储过程的优点:

①重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。

②提高性能。存储过程在创建的时候在进行了编译,将来使用的时候不再重新翻译。一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率。

③减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。

④安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。


创建简单的事例表有id,和name两个字段,并插入5条数据如下:

mysql> create table t1(id int not null primary key,name varchar(20) default null);
mysql> insert into t1 values(1,‘name1‘),(2,‘name2‘),(3,‘name3‘),(4,‘name4‘),(5,‘name5‘);
mysql> select * from t1;
+----+-------+
| id | name  |
+----+-------+
|  1 | name1 |
|  2 | name2 |
|  3 | name3 |
|  4 | name4 |
|  5 | name5 |
+----+-------+
5 rows in set (0.00 sec)

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

IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值;
OUT 输出参数:该值可在存储过程内部被改变,并可返回;
INOUT 输入输出参数:调用时指定,并且可被改变和返回。

IN参数例子:

mysql> delimiter //
mysql> create procedure p_in(IN p_id int)  
    -> begin
    -> delete from t1 where id = p_id;                                          
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> call p_in(5);
Query OK, 1 row affected (0.03 sec)
mysql> select * from t1;
+----+-------+
| id | name  |
+----+-------+
|  1 | name1 |
|  2 | name2 |
|  3 | name3 |
|  4 | name4 |
+----+-------+
4 rows in set (0.00 sec)

OUT参数例子:

mysql> delimiter //
mysql> create procedure p_out(OUT p_out int)
    -> begin
    -> select count(id) from t1 into p_out;
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> call p_out(@p_out_result);
Query OK, 1 row affected (0.00 sec)
mysql> select @p_out_result;
+---------------+
| @p_out_result |
+---------------+
|       4 |
+---------------+
1 row in set (0.00 sec)

同时存在IN,OUT参数:

mysql> delimiter //
mysql> create procedure p_in_out(IN p_in int,OUT p_out int)
    -> begin
    -> delete from t1 where id =p_in;
    -> select count(id) from t1 into p_out;              
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> select @p_in_out_result;
+------------------+
| @p_in_out_result |
+------------------+
|        3 |
+------------------+
1 row in set (0.00 sec)
mysql> select * from t1;
+----+-------+
| id | name  |
+----+-------+
|  1 | name1 |
|  2 | name2 |
|  3 | name3 |
+----+-------+
3 rows in set (0.00 sec)

INOUT参数:

mysql> select * from t1;
+----+-------+
| id | name  |
+----+-------+
|  1 | name1 |
|  2 | name2 |
|  3 | name3 |
|  4 | name4 |
|  5 | name5 |
+----+-------+
5 rows in set (0.00 sec)
mysql> delimiter //
mysql> create procedure p_inout(INOUT p_inout int)
    ->begin
    ->select p_inout;
    ->set p_inout=4;
    ->select p_inout;
    -> delete from t1 where id =p_inout; 
    ->end
    ->//
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> set @p_input=5;
mysql> call p_inout(@p_input);
+---------+
| p_inout |
+---------+
|    5 |
+---------+
1 row in set (0.00 sec)
+---------+
| p_inout |
+---------+
|    4 |
+---------+
1 row in set (0.00 sec)

后面继续学习在存储过程中加入流程控制语句!

本文出自 “时间煮雨” 博客,请务必保留此出处http://watchman110.blog.51cto.com/9194028/1687743

MYSQL 存储过程学习

标签:mysql 存储过程

原文地址:http://watchman110.blog.51cto.com/9194028/1687743

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!