我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

对于存储在数据库里面的数据进行复杂处理逻辑的话,对于普通程序员来说,一般会在代码逻辑(比如phpjava等)上进行处理。然而,对于高级程序员或者是数据库管理员来说,都是通过创建数据库端的函数(function)、触发器(trigger)或者存储过程(procedure)来进行的。本文以mysql为例,描述其中最复杂的存储过程(Stored Procedure)。

苏南大叔:mysql,如何定义和使用数据库存储过程stored procedure? - 存储过程
mysql,如何定义和使用数据库存储过程stored procedure?(图2-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码经验。本文描述mysql的存储过程的定义及使用方法。测试环境:win10mysql@5.7.26MySQLFront@5.3mysql 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 存储过程名(实参列表)

测试用例

这里采用的数据集还是原来的usersposts的例子,下面的文章里面有相关定义。自取。

测试用例一

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;
END
CALL insert_user2("随机文字",@id,@name);
SELECT @id , @name;

苏南大叔:mysql,如何定义和使用数据库存储过程stored procedure? - 存储过程2
mysql,如何定义和使用数据库存储过程stored procedure?(图2-2)

删除存储过程

DROP PROCEDURE [IF EXISTS] 存储过程名

查看存储过程

SHOW CREATE PROCEDURE  存储过程名

相关文章

总结

本文并没有详细描述存储过程的详细调试过程,待续。更多mysql文章,苏南大叔放在了下面的链接里面。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   mysql