MySQL存储过程详解之一

储存过程简介

 

一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

 

存储的优点有如下几点:

 

    1.存储过程增强了SQL语言的功能和灵活性。

    2.存储过程允许标准组件是编程。

       3.存储过程能实现较快的执行速度。

       4.存储过程能过减少网络流量。

       5.存储过程可被作为一种安全机制来充分利用。

 

MySQL存储过程的创建

 

1.格式

      MySQL存储过程创建格式:

           CREATE PROCEDURE 过程名 ([过程参数[,...]])   procedure [特性 ...] 过程体

      举例如下:

mysql> DELIMITER //  
	mysql> CREATE PROCEDURE proc1(OUT s int)  
	    -> BEGIN 
	    -> SELECT COUNT(*) INTO s FROM user;  
	    -> END 
	    -> //  
	mysql> DELIMITER ;

      注意:

          1.DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

          2.存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。

          3.过程体的开始与结束使用BEGIN与END进行标识。

 

2.参数

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

            CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...])

         IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

         OUT 输出参数:该值可在存储过程内部被改变,并可返回

       INOUT 输入输出参数:调用时指定,并且可被改变和返回

IN参数例子:

创建:

	mysql > DELIMITER //  
	mysql > CREATE PROCEDURE demo_in_parameter(IN p_in int)  
	     -> BEGIN   
	     -> SELECT p_in; /*查询输入参数*/  
	     -> SET p_in=2; /*修改*/  
	     -> SELECT p_in; /*查看修改后的值*/  
	     -> END;   
	     -> //  
	mysql > DELIMITER ;

执行结果:

	mysql > SET @p_in=1;  
	mysql > CALL demo_in_parameter(@p_in);  
	+------+  
	| p_in |  
	+------+  
	|   1  |   
	+------+  
	 
	+------+  
	| p_in |  
	+------+  
	|   2  |   
	+------+  
	 
	mysql> SELECT @p_in;  
	+-------+  
	| @p_in |  
	+-------+  
	|  1    |  
	+-------+  

以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值

OUT参数例子:

创建:

	mysql > DELIMITER //  
	mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int)  
	     -> BEGIN 
	     -> SELECT p_out;
	     -> SET p_out=2;
	     -> SELECT p_out; 
	     -> END;  
	     -> //  
	mysql > DELIMITER ; 

执行结果:

	mysql > SET @p_out=1;  
	mysql > CALL sp_demo_out_parameter(@p_out);  
	+-------+  
	| p_out |   
	+-------+  
	| NULL  |   
	+-------+  
 
	+-------+  
	| p_out |  
	+-------+  
	|   2   |   
	+-------+  

	+-------+  
	| p_out |  
	+-------+  
	|   2   |  
	+-------+  

 

INOUT参数例子:

创建;

	mysql > DELIMITER //   
	mysql > CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int)   
	     -> BEGIN 
	     -> SELECT p_inout;  
	     -> SET p_inout=2;  
	     -> SELECT p_inout;   
	     -> END;  
	     -> //   
	mysql > DELIMITER ; 

执行:

	mysql > SET @p_inout=1;  
	mysql > CALL demo_inout_parameter(@p_inout) ;  
	+---------+  
	| p_inout |  
	+---------+  
	|    1    |  
	+---------+  
	 
	+---------+  
	| p_inout |   
	+---------+  
	|    2    |  
	+---------+  
	 
	+----------+  
	| @p_inout |   
	+----------+  
	|    2     |  
	+----------+ 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值