前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL数据库高级篇之储存过程

MySQL数据库高级篇之储存过程

作者头像
JanYork_小简
发布2022-05-12 14:41:23
1.6K0
发布2022-05-12 14:41:23
举报
文章被收录于专栏:小简技术栈小简技术栈

何为储存过程?

存储过程是一组为了完成特定功能的 SQL 语句集合。MySQL 5.0终于开始已经支持存储过程,它是数据库中最重要的功能,

目的:将常用或复杂的工作预先用 SQL 语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程。

通俗的说,他就是MySQL中的“方法”,和Java等语言方法概念是差不多的。

优势

  • 封装性

存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的 SQL 语句,并且数据库专业人员可以随时对存储过程进行修改,而不会影响到调用它的应用程序源代码。

  • 可增强 SQL 语句的功能和灵活性

存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

  • 可减少网络流量

由于存储过程是在服务器端运行的,且执行速度快,因此当客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而可降低网络负载。

  • 高性能

存储过程执行一次后,产生的二进制代码就驻留在缓冲区,在以后的调用中,只需要从缓冲区中执行二进制代码即可,从而提高了系统的效率和性能。

  • 提高数据库的安全性和数据的完整性

使用存储过程可以完成所有数据库操作,并且可以通过编程的方式控制数据库信息访问的权限。

创建储存过程

语法:

代码语言:javascript
复制
CREATE PROCEDURE 过程名称([proc_parameter[,...]])
 [characteristic ...] routine_body 

注:proc_parameter :表示 [ IN | OUT | INOUT ] param_name type

上面的语法有些许看不懂,我直接写一个吧。

代码语言:javascript
复制
DELIMITER // 
CREATE PROCEDURE proc1(OUT s int) 
BEGIN 
SELECT COUNT(*) INTO s FROM user; 
END // 
DELIMITER ;

注:DELIMITER用于更改结尾符号,//也可以使用$$替换,只是为了更改默认的断句符号;

代码语言:javascript
复制
DELIMITER 分隔符 
    CREATE PROCEDURE 储存过程名称(IN|OUT|INOUT) 
    BEGIN 
        -- SQL语句
    END 分隔符 
DELIMITER ;

IN 输入参数:表示调用者向过程传入值 OUT 输出参数:表示过程向调用者传出值 INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值

你可以理解为,IN是从控制台输入参数,OUT相当于输出参数,如同Return

这里我就不多说了,自己摸索,然后附上一张知乎上面的演示图。

创建变量

DECLARE局部变量

DECLARE var_name[,...] type [DEFAULT value] 这个语句被用来声明局部变量。 要给变量提供一个默认值,请包含一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。如果没有DEFAULT子句,初始值为NULL。 局部变量的作用范围在它被声明的BEGIN ... END块内。它可以被用在嵌套的块中,除了那些用相同名字声明变量的块。

变量SET语句

SET var_name = expr [, var_name = expr] 在存储程序中的SET语句是一般SET语句的扩展版本。 被参考变量可能是子程序内声明的变量,或者是全局服务器变量。 在存储程序中的SET语句作为预先存在的SET语法的一部分来实现。这允许SET a=x, b=y, ...这样的扩展语法。其中不同的变量类型(局域声明变量及全局和集体变量)可以被混合起来。这也允许把局部变量和一些只对系统变量有意义的选项合并起来。

SELECT ... INTO 语句

SELECT col_name[,...] INTO var_name[,...] table_expr 这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。 SELECT id,data INTO x,y FROM test.t1 LIMIT 1;

调用储存过程

代码语言:javascript
复制
CALL 储存过程名(带入的参数)

查看储存过程

代码语言:javascript
复制
-- 查看储存过程状态
SHOW PROCEDURE STATUS;
-- 查看某一数据库的存储过程状态
SHOW PROCEDURE STATUS WHERE DB = '数据库名';
-- 查看储存过程的创建代码
SHOW CREATE PROCEDURE 储存过程名;

修改储存过程

代码语言:javascript
复制
ALTER PROCEDURE 储存过程名 [特性....];
-- 注意:只能修改属性,不能修改内容

删除存储过程

代码语言:javascript
复制
DROP PROCEDURE 储存过程名;
-- 删除前建议用IF EXISTS判断是否存在

如果你MySQL已经学到这里,那相比也能直接通过许多语法解释或者教学文章快速摸索出一二了,所以我也不像对于MySQL很罗嗦,就不会去怎么详细的说明了。 学到一定程度,观看文章文档学习效率>观看视频。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022 年 05 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 何为储存过程?
  • 优势
  • 创建储存过程
  • 创建变量
    • DECLARE局部变量
      • 变量SET语句
        • SELECT ... INTO 语句
        • 调用储存过程
        • 查看储存过程
        • 修改储存过程
        • 删除存储过程
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档