其实存储过程也可以叫做过程,而函数也可以叫做存储函数,两者都是处理数据的一种方式,但是不同在于函数是必须要有返回值的,而过程则没有返回值,过程可以理解为是一种用来处理数据的没有返回值的函数,但是他们的语法又存在区别,接下来详细的介绍一下存储过程的使用
创建过程:
// 创建过程
create procedure 过程名字([参数列表])
begin
-- 过程代码
end;
// 示例
create procedure getUserNames()
begin
select uname from user;
end;
这里需要说一下过程的参数列表,创建过程时需要用到限定类型,有三个:in、out、inout
in | 传入数据供过程内部使用,可以是变量或者值,传入的参数值不管在过程内部怎么修改,在过程外部不受影响。 |
out | 传入的数据只能是变量,传入到过程之后先置为NULL,过程内部修改变量值,外部受影响 |
inout | 传入的数据只能是变量,过程内部修改变量值,外部受影响 |
就这几个参数,光说也不是很好理解,下边提供两个过程,通过改变setName的限定值来看一下三者的区别
// setName的一个过程,依次修改限定的值
create procedure setName(in name varchar(30))
BEGIN
// 先看一下传递进来的值
SELECT name as first_name;
// 过程内部改变传递进来的值
set name = "123456";
// 看一下修改之后的值
select name as second_name;
END;
// getName的一个过程,看一下出入的参数值是否被修改
create procedure getName()
BEGIN
DECLARE name VARCHAR(30) ;
set name = "123";
select name as init_name;
// 将值传入到setName修改值
call setName(name);
select name as last_name;
END;
依次修改setName的参数列表中限定词,看一下打印情况,作用一目了然
查看过程:
// 查看所有的存储过程
show procedure status\G;
// 按着名称查看存储过程
show procedure status like '%me';
// 查看过程的创建语句
show create procedure 过程名
show create procedure setName\G;
使用过程:
// 使用call关键字进行过程的使用
call getNames;
删除过程:
// 删除的基本语法都是 drop 类型 名称
drop procedure setName;
以上就是对存储过程的基本介绍