数据库系统原理——13存储过程

「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

xdm,日拱一卒,我又来了了,今天依然是数据库,不过是存储过程篇

基本概念

存储过程是一组为了完成某项特定功能的sql语句集,其实质上就是一段存储在数据库中的代码,它可以由声明式的sql语句(如CREATE、UPDATE和SELECT等语句)和过程sql语句(如IF...THEN...ELSE控制结构语句)组成。

使用存储过程的好处

  • 可增强SQL语言的功能和灵活性
  • 良好的封装性
  • 高性能
  • 可减少网络流量
  • 可作为一种安全机制来确保数据库的安全性和数据的完整性

创建存储过程

CREATE PROCEDURE sp_name([proc_parameter[,...]])
routine_body
BEGIN
    # 增删改语句
END
复制代码

存储过程体

局部变量

在存储过程体中可以声明局部变量,用来存储存储过程体中的临时结果

SET语句

使用set语句为局部变量赋值

SELECT...INTO语句

使用select...into把选定的值直接存储到局部变量中

流程控制语句
  • 条件判断语句
  • 循环语句
游标

游标是一个被select语句检索 出来的结果集

  • 声明游标

    DECLARE cursor_name CURSOR FOR select_statement
    复制代码
  • 打开游标

    OPEN cursor_name
    复制代码
  • 读取数据

    FETCH cursor_name INTO var_name[,var_name]...
    复制代码
  • 关闭游标

    CLOSE cursor_name
    复制代码

使用游标的过程中,需要注意以下几点:

  • 游标只能用于存储过程或存储函数中,不能单独在查询操作中使用
  • 在存储过程或存储函数中可以定义多个游标,但是在一个BEGIN...END语句块中每一个游标的名字必须是唯一的
  • 游标不是一条select语句, 而是被select语句检索出来的结果集

调用存储过程

创建好存储过程后,可以使用CALL语句在程序或者其他存储过程中调用它。

CALL sp_name([parameter[,...]])
CALL sp_name[()]
复制代码

删除存储过程

DROP PROCEDURE[IF EXISTS]sp_name
复制代码

我问佛:为何不给所有女子羞花闭月的容颜?
佛曰:那只是昙花的一现,用来蒙蔽世俗的眼, 没有什么美可以抵过一颗纯净仁爱的心. 我把它赐给每一个女子, 可有人让它蒙上了灰. 继续前进!