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;
END
CALL 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
文章,苏南大叔放在了下面的链接里面。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。