mysql_存储过程

概述

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。

简要

存储过程和函数是事先经过编译并存储在数据库中的一段sql语句的集合。

  • 存储过程和函数的区别

函数必须有返回值,而存储过程没有。
存储过程的参数可以是IN,OUT,INOUT,类型,而函数只能是IN。

  • 优点

存储过程只在创建时进行编译,而sql语句每次执行都需要编译,所以存储过程可以提高数据库执行速度。
简化复杂操作,结合事务一起封装。
复用性好;
安全性高,可指定存储过程的使用权。

  • 创建存储过程的语法
语法:
CREATE PROCEDURE 存储过程名(参数体) 
BEGIN 
	sql语句;
END

存储过程的参数形式:[IN | OUT | INOUT]参数名  类型
    IN   输入参数
    OUT  输出参数
    INOUT 输入输出参数

//案例
DELIMITER $$
CREATE PROCEDURE p1()
BEGIN
	SELECT * FROM t_su;
END $$

CALL P1();
  • 调用
    call 存储名();
  • @ delimiter $ $
    他与存储过程无关 delimiter 语句将标准分割符–分号(;)
    更改 $ $ , 因为我们想将存储过程 作为一个整体传递给服务器,而不是让mysql 工具一次解析每个语句,告诉mysql解析器 ,该段命令是否已经结束了,mysql是否可以执行了,默认情况下delimiter是分号;。在命令行客户端中,如果有一行以分号结束,那么回车 后执行 改命令,但是有的时候,不希望mysql这么做。在为可能输入较多的语句,且 语句包含有分号,使用delimiterr$ $ 这样只有$$出现之后mysql解析器解析执行这段语句

案例

1)参数 in 类型

DELIMITER	$$
CREATE PROCEDURE P2(IN a INT)
BEGIN
	SELECT * from t_su where stu_id = a;
END	$$
CALL p2(2);

2)参数 out 类型

DELIMITER	$$
CREATE PROCEDURE P3(OUT a INT)
BEGIN
	SELECT count(*) into a from t_su ;
END	$$

CALL p3(@a);

SELECT @a;
DELIMITER	$$
CREATE PROCEDURE P4(OUT a INT,in b int)
BEGIN
	SELECT count(*) into a from t_su where stu_id = b;
END	$$

CALL p4(@a,2);

SELECT @a;

3)参数 inout 参数

DELIMITER	//
CREATE PROCEDURE P5(inOUT p INT)
BEGIN
	if(p  is not null)THEN
			set p = p+1;
	ELSE 
			set p = 10;
	end if;
END	//

CALL p5(@p);	
SELECT @p;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值