Skip to content
On this page

存储过程

为以后的使用而保存的一条或多条MySQL语句的集合。可以看做是批处理或者函数

使用存储过程的好处

简单、安全、高性能

  • 简化复杂的操作
  • 保证数据的完整性:防止错误,开发人员和程序都是用同个步骤,保证了数据的一致性
  • 简化对变动的管理:限制对基础数据的访问,减少数据讹误的机会
  • 提升性能,使用存储过程比使用单独的MySQL语句更快
  • 编写功能更强、更灵活,同时要求开发人员需要更高的技能和更丰富的经验
  • 限制用户的权限,允许用户使用存储过程,但不允许创建

使用存储过程

执行

CALL procedurename(xxx, @var1, @var2)

类似于函数调用,需要传入参数,这里的参数用两种:

  • 具体数值,表示传入的参数
  • @开头,表示一个占位符,用于输出的内容

执行后不会输入任何信息,接着可以使用SELECT获取输出变量内容。如:SELECT @var1

创建

sql
CREATE PROCEDURE procedurename(
	IN var3 INT,
	OUT var1 DECIMAL(8,2),
	OUT var2 DECIMAL(8,2),
) COMMENT 'xxxx'
BEGIN
	SELECT xxx INTO var1 AS xxx
	FROM xxx;
	SELECT xxx INTO var2 AS xxx
	FROM xxx = var3;
END;

IN variablename datatype:声明传入的变量名和类型,后续可以直接在存储过程中使用。

OUT variablename datatype:声明输出的变量名和类型,使用INTO写入。

COMMENT 'xxx':它不是必需的,但如果给出,将 在SHOW PROCEDURE STATUS的结果中显示。

声明临时变量

DECLARE name datatype

使用注释

在语句前加上--即可。

在mysql命令行中创建时,由于默认的MySQL语句分隔符为;,存储过程中也包含;,可以临时将默认的分隔符设置为//,创建完存储过程后再恢复。

设置方法为:DELIMITER //

除\符号外,任何字符都可以用作语句分隔符。

删除

DROP PROCEDURE procedurename;

检查存储过程

SHOW CREATE PROCEDURE:显示用来创建一个存储过程的CREATE语句。

SHOW PROCEDURE STATUS (LIKE 'xxx'):获得包括何时、由谁创建等详细信息的存储过程列表。可使用LIKE指定一个过滤模式。

游标

游标(cursor)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。

游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。

使用游标

创建游标

游标用DECLARE语句创建。

DECLARE cursorname CURSOR FOR xxx

打开游标

open cursorname

关闭游标

CLOSE cursorname

CLOSE释放游标使用的所有内部内存和资源,因此在每个游标不再需要时都应该关闭。

如果你不明确关闭游标,MySQL将会在到达END语句时自动关闭它。

在一个游标关闭后,如果没有重新打开,则不能使用它。但是,使用声明过的游标不需要再次声明,用OPEN语句打开它就可以了。

使用游标数据

在一个游标被打开后,可以使用FETCH语句分别访问它的每一行。

FETCH指定检索什么数据(所需的列),检索出来的数据存储在什么地方。

配合REPEAT进行循环

sql
BEGIN
	...
	OPEN xxx;

	REPEAT
		FETCH xxx INTO o;
		...

	CLOSE xxx;
END;

MIT Licensed | Copyright © 2021 - 2022