mysql,如何定义和使用数据库存储过程stored procedure?
发布于 作者:苏南大叔 来源:程序如此灵动~
对于存储在数据库里面的数据进行复杂处理逻辑的话,对于普通程序员来说,一般会在代码逻辑(比如php、java等)上进行处理。然而,对于高级程序员或者是数据库管理员来说,都是通过创建数据库端的函数(function)、触发器(trigger)或者存储过程(procedure)来进行的。本文以mysql为例,描述其中最复杂的存储过程(Stored Procedure)。

大家好,这里是苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码经验。本文描述mysql的存储过程的定义及使用方法。测试环境:win10,mysql@5.7.26,MySQLFront@5.3,mysql client@5.7.26。
前文提要
正如文初所描述的那样,存储过程和函数是同级别的mysql概念,而函数function的概念,已经在上一篇文章中,进行过描述。参考链接:
存储过程和函数的定义和使用,是非常类似的。这里先回顾一下函数的定义和使用。
定义函数:
create function 函数名(参数名1 参数类型1,参数名2 参数类型2,...) returns 返回类型
begin
函数体
End调用函数:
select 函数名(参数)存储过程的定义和使用
定义存储过程:
CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)
BEGIN
sql语句1;
sql语句2;
END这里没有像函数定义一样,使用returns或者return字样,但是存储过程能返回很多值(函数仅仅能返回一个值)。存储过程的参数和返回值都定义到了一起,使用IN或者OUT进行区分。
IN就是入参,就是传递进来的参数。OUT就是返回值,返回的数据会被定义到这个位置。INOUT就是既是参数也是返回值,接收的参数会被返回值覆盖。- 当然可以没有任何参数(意味着可以没有返回值,强烈对比于函数的定义)
在函数体里面,还可能使用到下面的语法:
DECLARE,用来声明变量。SET,赋值语句,用于对变量进行赋值。SELECT… INTO,也是个赋值语句。把从数据表中查询的结果存放到变量中。
调用方式
调用存储过程:
CALL 存储过程名(实参列表)测试用例
这里采用的数据集还是原来的users和posts的例子,下面的文章里面有相关定义。自取。
测试用例一
CREATE PROCEDURE `insert_user`(IN name VARCHAR(15))
BEGIN
INSERT INTO users(`name`) VALUES (name);
# insert into users VALUES (1,"朝阳群众");
END;call insert_user("朝阳群众")测试用例二
CREATE PROCEDURE insert_user2(IN name VARCHAR(15),OUT id int,OUT name2 VARCHAR(15))
BEGIN
SET name = CONCAT(name,"__");
INSERT INTO users(`name`) values (name);
SELECT users.id , users.name INTO id,name2
FROM users WHERE users.name = name;
ENDCALL insert_user2("随机文字",@id,@name);
SELECT @id , @name;
删除存储过程
DROP PROCEDURE [IF EXISTS] 存储过程名查看存储过程
SHOW CREATE PROCEDURE 存储过程名相关文章
- https://newsn.net/say/mysql-procedure.html
- https://newsn.net/say/mysql-left-join.html
- https://newsn.net/say/mysql-inner-join.html
总结
本文并没有详细描述存储过程的详细调试过程,待续。更多mysql文章,苏南大叔放在了下面的链接里面。