IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL数据库高级篇之储存过程 -> 正文阅读

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

何为储存过程?

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

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

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

优势

  • 封装性

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

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

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

  • 可减少网络流量

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

  • 高性能

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

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

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

创建储存过程

语法:

CREATE PROCEDURE 过程名称([proc_parameter[,...]])
 [characteristic ...] routine_body 

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

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

DELIMITER // 
CREATE PROCEDURE proc1(OUT s int) 
BEGIN 
SELECT COUNT(*) INTO s FROM user; 
END // 
DELIMITER ;

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

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;

调用储存过程

CALL 储存过程名(带入的参数)

查看储存过程

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

修改储存过程

ALTER PROCEDURE 储存过程名 [特性....];
-- 注意:只能修改属性,不能修改内容

删除存储过程

DROP PROCEDURE 储存过程名;
-- 删除前建议用IF EXISTS判断是否存在

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

学到一定程度,观看文章文档学习效率>观看视频。

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-13 11:48:46  更:2022-05-13 11:50:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 5:38:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码