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存储过程

?(注:本文参考自 《MySQL必知必会》[英] Ben Forta)?

目录

1.1 为什么使用要存储过程

2.1 使用存储过程

2.1.1 执行存储过程

2.1.2?创建存储过程

2.1.3 调用/删除存储过程

2.1.4 在存储过程中使用参数

2.1.5?检查存储过程


1.1 为什么使用要存储过程

????????理由有以下几点:

  1. 通过把处理封装在容易使用的单元中,简化复杂的操作(正如前
    面例子所述)。
  2. 由于不要求反复建立一系列处理步骤,这保证了数据的完整性。
    如果所有开发人员和应用程序都使用同一(试验和测试)存储过
    程,则所使用的代码都是相同的。
    这一点的延伸就是防止错误。需要执行的步骤越多,出错的可能
    性就越大。防止错误保证了数据的一致性。
  3. 简化对变动的管理。如果表名、列名或业务逻辑(或别的内容)
    有变化,只需要更改存储过程的代码。使用它的人员甚至不需要
    知道这些变化

????????换句话说,使用存储过程有3个主要的好处,即简单安全高性能。

2.1 使用存储过程

????????使用存储过程需要知道如何执行(运行)它们。存储过程的执行远比其定义更经常遇到,因此,我们将从执行存储过程开始介绍。然后再介绍创建和使用存储过程。

2.1.1 执行存储过程

????????MySQL称存储过程的执行为调用,因此MySQL执行存储过程的语句为CALL。CALL接受存储过程的名字以及需要传递给它的任意参数。例如:

CALL productpricing ( @pricelow, @pricehigh, @priceaverage );
????????其中,执行名为productpricing的存储过程,它计算并返回产品的最低、最高和平均价格

2.1.2?创建存储过程

?再 看一个例子,一个返回产品平均价格的存储过程。如下:
CREATE PROCEDURE productpricing () 
BEGIN
	SELECT
	AVG( pro_price ) AS priceaverage 
	FROM
	products 
END;

????????其中,用CREATE PROCEDURE productpricing()语句定义一个名为productpricing的存储过程。如果存储过程接受参数,它们将在()中列举出来。此存储过程没有参数,但后跟的()仍然需要。然后,BEGINEND语句用来限定存储过程体。这里存储过程体是一个简单的select语句~

????????在MySQL处理这段代码时,它创建一个新的存储过程productpricing。没有返回数据,因为这段代码并未调用存储过程,这里只是为以后使用而创建它。

2.1.3 调用/删除存储过程

????????存储过程已经创建好了,我们该怎么使用它呢?只需要一行代码:

call productpricing(); 

????????删除存储过程也是一行代码:

DROP PROCEDURE productpricing;

????????仅当存储过程存在时,我们可以这样:

DROP PROCEDURE IF EXISTS productpricing

2.1.4 在存储过程中使用参数

????????productpricing只是一个简单的存储过程,它简单地显示SELECT语句的结果。一般,存储过程并不显示结果,而是把结果返回给你指定的变量(变量指的是在内存中申请一定的空间,用来存储临时数据)。下面创建一个接收变量的存储过程:

CREATE PROCEDURE productpricing(
	OUT lowestprice DECIMAL(8,2),
	OUT highestprice DECIMAL(8,2),
	OUT averageprice DECIMAL(8,2),
)
BEGIN
SELECT MIN(pro_price) INTO lowestprice FROM product;
SELECT MAX(pro_price) INTO highestprice FROM product;
SELECT AVG(pro_price) INTO averageprice FROM product;
END;

????????该存储过程接受3个参数:lowestprice存储产品最低价格,highestprice存储产品最高价格,averageprice存储产品平均价格。每个参数必须具有指定的类型,这里使用十进制值(长度为8,保留两位小数的DECIMAL类型)。关键字OUT指出相应的参数用来从存储过程传出一个值(返回给调用者)。

????????MySQL支持IN(传递给存储过程)、OUT(从存储过程传出,如这里所用)和INOUT(对存储过程传入和传出)类型的参数。存储过程的代码位于BEGIN和END语句内,如前所见,它们是一系列SELECT语句,用来检索值,然后保存到相应的变量(通过指定INTO关键字)。

????????存储过程的参数允许的 数据类型与表中使用的数据类型相同
????????调用该存储过程,必须制定3个变量名,如下:
CALL productpricing ( @pricelow, @pricehigh, @priceaverage );

????????需要注意的是,MySQL变量都必须以@开始

????????在调用时,这条语句并不显示任何数据。它返回以后可以显示(或在其他处理中使用)的变量。下面检索出产品的平均价格,我们可以从@priceaverage中获取到。

输入:

SELECT @priceaverage AS '产品平均价格';

?输出:

?????????再举一个栗子,这次使用IN和OUT参数。创建getbyid存储过程,用于接受id并返回数据:

CREATE PROCEDURE getbyid(
	IN productid INT,
	OUT productname VARCHAR(32)
)
BEGIN
SELECT `pro_name` FROM product 
WHERE id = productid INTO productname;
END;

调用这个存储过程:

CALL getbyid ( 1, @NAME );

简单解释一下,“1”是我们传给getbyid存储过程的参数,“@name”是我们想要的变量。

输入:

SELECT @NAME AS '产品名'

输出:

2.1.5?检查存储过程

?????????格式: SHOW CREATE PROCEDURE 【存储过程名】

比如:

SHOW CREATE PROCEDURE getbyid

(未完待续...)

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

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:49:05-

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