MySQL的存储过程是什么?怎么用?

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: MySQL存储过程学习

使用存储过程

存储过程

存储过程简单来说,就是为了以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件。但他的作用不仅限于批处理。

为什么要处理存储过程

  • 通过把处理封装在容易使用的单元中,简化复杂的操作。
  • 使用统一存储过程,可防止错误,因为执行的步骤越多,出错的可能性就越大。
  • 简化对变动的管理。如果变动了,我们只需修改存储过程就好。
  • 提高性能,使用存储过程比单独的SQL语句要快
  • 存在一些只能在单个请求中的MySQL元素和特性,存储过程可以使用他们来编写功能更强更灵活的代码。

总而言之就是:简单,安全,高性能。

使用存储过程

执行存储过程

mysql称存储过程的执行为调用。

CALL productpricing (@pricelow
                    @pricehigh
                    @priceaverage);

执行名为productpricing的存储过程,它计算并返回产品的最低,最高和平均价格。

创建存储过程

例:返回产品平均价格的存储过程

CREATE PROCEDURE productpricing()
BEGIN 
    SELECT Avg(prod_price) AS priceaverage
    FROM products;
END;

这个存储过程叫productpriceing,用CREATE PROCEDURE productpricing()语句定义。

如果,存储过程接受参数,他们将在()中列举出来。此存储过程没有参数,但后面的()依旧需要你跟着。BEGIN和END用来限定存储过程体。

那么如何使用这个存储过程呢?

CALL productpricing();

删除存储过程

DROP  PROCEDURE productpricing;

使用参数

一般来说,存储过程是不显示结果的,而是把结果返回给你指定的变量

变量:内存中一个特定的位置,用来临时存储数据。

那么我们修改一手productpricing():

CREATE PROCEDURE productpricing(
    OUT pl DECIMAL(8,2),
    OUT ph DECIMAL(8,2),
    OUT pa DECIMAL(8,2)
    )
BEGIN 
    SELECT Min(prod_price)
    INTO p1
    FROM products;
    SELECT Max(prod_price)
    INTO ph
    FROM products;
    SELECT AVg(prod_price)
    INTO pa
    FROM products;
END;

:ice_cream: pl存储产品的最低价格。每个参数必须具有指定的类型,这里使用十进制值。关键字out指出这个参数是用来从存储过程传出一个值(返回给调用者)。

IN:传递给存储过程

OUT: 从存储过程传出

INOUT: 对存储过程传入和传出

CALL productpricing (@pricelow
                    @pricehigh
                    @priceaverage);
mysql的变量名必须以@开始

我们想要的结果就存储到了上面的三个变量里面了

SELECT @pricelow;

用上面的语句,就可以看到这个值了。

我们再写一个例子,用用IN和OUT。ordertotal接受订单号并返回该订单的合计

CREATE PROCEDURE ordertotal(
        IN onumber INT,
        OUT ototal DECIMAL(8,2)
)
BEGIN    
    SELECT Sum(item_price*quantity)
    FROM orderitems
    WHERE order_num = onumber
    INTO ototal;
END;

那要怎么样调用呢?

CALL ordertotal (20005,@total);

### 建立智能存储过程

--NAME:ordertatal
--Parameters:onumber = order number 
--            taxable = 0 if not taxable , 1 if taxable
--             ototal = order total variable

CREATE PROCEDURE ordertotal(
        IN onumber INT ,
        IN taxable BOOLEAN,
        OUT ototal DECIMAL (8,2)
        )COMMIT 'Obtain order total ,optionally adding tax'
        
BEGIN
 
     --Declare variable for total
     DECLARE total DECIMAL(8,2);
     --Declare tax percentage
     DECLARE taxrate INT DEFAULT 6;
     
     --Get the order tatal
     SELECT Sum(item_price*quantity)
     FROM orderitems
     WHERE order_num = onumber
     INTO tatal;
     
     --IS this taxble?
     IF taxable THEN 
             --Yes,so add taxrate to the total
             SELECT total+(total/100*taxrate) INTO total;
     END IF;
     
     --AND finally,save to out variable
     SELECT total INTO ototal;
     
 END;
  • -- 这玩意后面跟的是注释
  • DECLARE语句定义了两个局部变量,还支持设定默认值
  • SELECT语句的结果存储到了total
  • IF呢就是IF用法呗,真就执行。

检查存储过程

SHOW PROCEDURE STATUS LIKE '过程名';

会获得何时,谁创建等详细信息的存储过程列表。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 SQL 关系型数据库
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
轻松入门MySQL:加速进销存!利用MySQL存储过程轻松优化每日销售统计(15)
|
2月前
|
存储 关系型数据库 MySQL
Mysql基础第二十六天,使用存储过程
Mysql基础第二十六天,使用存储过程
28 0
Mysql基础第二十六天,使用存储过程
|
2月前
|
存储 SQL 关系型数据库
【MySQL 数据库】9、存储过程
【MySQL 数据库】9、存储过程
205 0
|
26天前
|
存储 SQL 关系型数据库
mysql存储过程示例
mysql存储过程示例
11 0
|
3月前
|
存储 SQL 关系型数据库
[MySQL]存储过程
[MySQL]存储过程
76 0
[MySQL]存储过程
|
3月前
|
存储 关系型数据库 MySQL
MySQL 中的存储过程-3
MySQL 中的存储过程
22 0
|
3月前
|
存储 SQL 关系型数据库
MySQL 中的存储过程-2
MySQL 中的存储过程
19 0
|
4天前
|
SQL 关系型数据库 MySQL
【MySQL-3】图形化界面工具DataGrip安装&配置&使用
【MySQL-3】图形化界面工具DataGrip安装&配置&使用
|
4天前
|
关系型数据库 MySQL Linux
【MySQL-2】MySQL的下载&安装&启停&配置环境变量【一条龙教程】
【MySQL-2】MySQL的下载&安装&启停&配置环境变量【一条龙教程】
|
6天前
|
弹性计算 关系型数据库 MySQL
在线安装MySQL5.7和MySQL8.0
【4月更文挑战第30天】
17 0