美文网首页mysqlMySQL
MySQL——使用存储过程(十六)

MySQL——使用存储过程(十六)

作者: 开心糖果的夏天 | 来源:发表于2017-06-27 18:03 被阅读50次

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

    MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

    MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

    存储过程

    MySQL 5 添加了对存储过程的支持。存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。

    使用存储过程

    一、执行存储过程

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

    CALL productpricing(@pricelow,@pricehigh,@priceaverage);
    

    其中,执行名为 productpricing的存储过程,它计算并返回产品的最低、最高和平均价格。存储过程可以显示结果也可以不显示结果。

    二、创建存储过程

    例如:一个返回产品平均价格的存储过程。

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

    此存储过程名为 productpricing,用CREATE PROCEDURE productpricing()语句定义。如果存储过程接受参数,它们将在()中列举出来。此存储过程没有参数,但后跟的()仍然需要。BEGIN和END语句用来限制存储过程体,过程体本身是一个简单的SELECT语句。在MySQL处理这段代码时,它创建了一个新的存储过程 productpricing。没有返回数据,因为这段代码并未调用存储过程,这里只是为了今后使用而创建它。存储过程的使用如下:

    CALL  productpricing();
    

    CALL productpricing();执行刚创建的存储过程并显示返回的结果。因为存储过程实际上是一种函数,所以存储过程名后需要有()符号(即使不传递参数也需要)。

    三、删除存储过程

    存储过程在创建之后,被保存在服务器上以供使用,直至被删除。删除命令从服务器中删除存储过程。

    DROP PROCEDURE productpricing;
    

    四、使用参数

    productpricing只是一个简单的存储过程,它简单的显示SELECT语句的结果。一般,存储过程并不显示结果,而是把结果返回给你指定的变量。

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

    以下是productpricing的修改版本:

    CREATE PROCEDURE productpricing(
    OUT p1 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 ;
    

    此存储过程接受3个参数:p1存储产品最低价,ph存储产品最高价,pa 存储产品平均价格。每个参数必须具有指定的类型,这里使用十进制值。关键字OUT指出相应的参数用来从存储过程传出一个值(返回给调用者)。为了用此修改过的存储过程,必须指定3个变量名,如下所示:

    CALL productpricing(@pricelow,@pricehigh,@priceaverage);
    

    由于此存储过程要求3个参数,因此必须正好传递3个参数,不多也不少。所以,这条CALL语句给出3个参数。它们是存储过程将保存结果的3个变量的名字。
    为了获取3个值,可以使用以下语句:

    SELECT @pricelow,@pricehigh,@priceaverage;
    

    五、检查存储过程

    为显示用来创建一个存储过程的CREATE语句,使用SHOW CREATE PROCEDURE语句:

    SHOW CREATE PROCEDURE ordertotal;
    

    为了获得包括何时、由谁创建等详细信息的存储过程列表,使用SHOW PROCEDURE STATUS。

    相关文章

      网友评论

      • 张一一:举的几个例子,为什么要用存储过程而不是直接 调用sql,要调用存储过程。
        开心糖果的夏天:@张一一 数据库某个功能的实现可能不仅仅是一种方式,利用存储过程就是其中的一种。相比较而言,使用存储过程比使用单独的SQL语言语句要快。本节给出的简单例子只是为了说明白存储过程的使用等,遇到具体问题时择优选择合适的方法就行。

      本文标题:MySQL——使用存储过程(十六)

      本文链接:https://www.haomeiwen.com/subject/njekcxtx.html