存储过程
为以后的使用而保存的一条或多条MySQL语句的集合。可以看做是批处理或者函数
使用存储过程的好处
简单、安全、高性能
- 简化复杂的操作
- 保证数据的完整性:防止错误,开发人员和程序都是用同个步骤,保证了数据的一致性
- 简化对变动的管理:限制对基础数据的访问,减少数据讹误的机会
- 提升性能,使用存储过程比使用单独的MySQL语句更快
- 编写功能更强、更灵活,同时要求开发人员需要更高的技能和更丰富的经验
- 限制用户的权限,允许用户使用存储过程,但不允许创建
使用存储过程
执行
CALL procedurename(xxx, @var1, @var2)
类似于函数调用,需要传入参数,这里的参数用两种:
- 具体数值,表示传入的参数
- @开头,表示一个占位符,用于输出的内容
执行后不会输入任何信息,接着可以使用SELECT
获取输出变量内容。如:SELECT @var1
创建
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
进行循环
BEGIN
...
OPEN xxx;
REPEAT
FETCH xxx INTO o;
...
CLOSE xxx;
END;