MySQL——存储过程

Posted 名字真的很急用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL——存储过程相关的知识,希望对你有一定的参考价值。

在我们的开发过程中,经常会遇到重复使用某一功能的情况,为此,MySQL引入了存储过程,存储过程就是一条或多条SQL语句的集合,当对数据库进行一系列复杂操作时,存储过程可以将这些复杂的操作封装成一个代码块,一便重复使用,大大减少了数据库开发人员的工作量,

创建存储过程
创建存储过程,需要使用CREATE PROCEDURE 语句,

CREATE PROCEDURE sp_name(proc_parameter)
routine_body

上述语法中,create procedure 为用来创建存储过程的关键字,sp_name为存储过程的名称,proc_parameter为指定存储过程的参数列表,该参数列表的形式如下:

IN | OUT |INOUT  param_name type

上述参数中IN表示输入的参数,OUT表示输出的参数,INOUT表示既可以输入也可以输出,param_name表示参数名称,type表示参数的类型,它可以是MySQL中任意的一种类型。

routine_body是SQL代码的内容,可以用begin…end来表示SQL代码的开始和结束。

例如:

CREATE TABLE foods(

   fid INT,
   fname VARCHAR(20),
   fnum INT
);
CREATE TABLE  orders(

	oid INT,
	fid INT,
	price INT
);
 商品插入数据
INSERT INTO foods VALUES(1,'西瓜',20);
INSERT INTO foods VALUES(2,'羊肉串',100);
INSERT INTO foods VALUES(3,'奶粉',25);

具体语法格式:
方式一:

DELIMITER $$                              --定义结束符号
CREATE PROCEDURE food() --存储过程的声明,并起个名
BEGIN                                           --开始写存储过程
SELECT * FROM FOODS;
END $$                                          --存储过程的结束

DELIMITER--要把结束符号改回来。
调用存储过程:
CALL food;

方式二:

DELIMITER $$
CREATE PROCEDURE food(IN id_foods INT) --IN表示接收外部的数据
BEGIN
 --存储过程具体封装的业务语句
 delete from foods where fid = id_foods;
 END $$
 --调用
 CALL food(1);

方式三:

DELIMITER $$
CREATE PROCEDURE orders(IN oid int,IN fid int,IN pr int,OUT var int)
BEGIN
INSERT INTO orders values(oid,fid,pr)
 --定义一个变量
 SET @var =1;
  --执行成功返回var
  select @var;
  END $$

CALL orders(1,2,30,@a);

总结:

set @变量名=数值
in 输入
out 返回
select @变量名

删除存储过程

drop procedure 存储名;

查看存储过程

show create procedure 存储名;

以上是关于MySQL——存储过程的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHP 代码中调用 MySQL 存储过程?

如何从 PHP 代码中调用 MySQL 存储过程?

如何从 PHP 代码中调用 MySQL 存储过程?

java 登录过程 - android片段,异步任务登录,Asp.net控制器,存储库

[转]MYSQL 创建存储过程

怎么在mysql中查询已建立的存储过程