zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

MySQL数据库,详解存储过程使用(一)

2023-03-14 22:58:32 时间

需求背景介绍

线上程序有时候出现问题导致数据错误的时候,如果⽐较紧急,我们可以写⼀个存储来快速修复这块的数据,然后再去修复程序,这种⽅式我们⽤到过不少。存储过程相对于java程序对于java开发来说,可能并不是太好维护以及阅读,所以不建议在程序中去调⽤存储过程做⼀些业务操作。

关于⾃定义函数这块,若mysql内部⾃带的⼀些函数⽆法满⾜我们的需求的时候,我们可以⾃⼰开发⼀些⾃定义函数来使⽤。

所以建议⼤家掌握mysql中存储过程和⾃定义函数这块的内容

存储过程

概念

⼀组预编译好的sql语句集合,理解成批处理语句。

好处:

• 提⾼代码的重⽤性

• 简化操作

• 减少编译次数并且减少和数据库服务器连接的次数,提⾼了效率。

创建存储过程

create procedure 存储过程名([参数模式] 参数名 参数类型)

begin

存储过程体

end

参数模式有3种:

in:该参数可以作为输⼊,也就是该参数需要调⽤⽅传⼊值。

out:该参数可以作为输出,也就是说该参数可以作为返回值。

inout:该参数既可以作为输⼊也可以作为输出,也就是说该参数需要在调⽤的

时候传⼊值,又可以作为返回值。

参数模式默认为IN。

⼀个存储过程可以有多个输⼊、多个输出、多个输⼊输出参数。

调⽤存储过程

call 存储过程名称(参数列表);

注意:调⽤存储过程关键字是call。

删除存储过程

drop procedure [if exists] 存储过程名称;

存储过程只能⼀个个删除,不能批量删除。if exists:表⽰存储过程存在的情况下删除。

修改存储过程

存储过程不能修改,若涉及到修改的,可以先删除,然后重建。

查看存储过程

show create procedure 存储过程名称;

可以查看存储过程详细创建语句。

示例

示例1:空参列表

创建存储过程

/*设置结束符为$*/

DELIMITER $

/*如果存储过程存在则删除*/

DROP PROCEDURE IF EXISTS proc1;

/*创建存储过程proc1*/

CREATE PROCEDURE proc1()

BEGIN

INSERT INTO t_user VALUES (1,30,'路⼈甲Java');

INSERT INTO t_user VALUES (2,50,'刘德华');

END $

/*将结束符置为;*/

DELIMITER ;

delimiter⽤来设置结束符,当mysql执⾏脚本的时候,遇到结束符的时候,会把

结束符前⾯的所有语句作为⼀个整体运⾏,存储过程中的脚本有多个sql,但是

需要作为⼀个整体运⾏,所以此处⽤到了delimiter。

mysql默认结束符是分号。

上⾯存储过程中向t_user表中插⼊了2条数据。

调⽤存储过程:CALL proc1();

验证效果:

mysql> select * from t_user;

+----+-----+---------------+

| id | age | name |

+----+-----+---------------+

| 1 | 30 | 路⼈甲Java |

| 2 | 50 | 刘德华 |

+----+-----+---------------+

2 rows in set (0.00 sec)

存储过程调⽤成功,test1表成功插⼊了2条数据。