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——存储过程的主要内容,如果未能解决你的问题,请参考以下文章