肥涵

导航

Mysql-10 存储过程

1、什么是存储过程

  a、存储过程就是为以后的使用而保存的一条或多条Mysql语句的集合;

  b、可将存储过程看作为批处理文件。

 

2、为什么需要使用存储过程

  a、通过把处理封装在容易使用的单元中,简化复杂操作;

  b、由于不要求反复建立一系列处理步骤,这保证了数据的完整性;

  c、简化对变动的管理,如果表名、列名或业务逻辑有变化,只需要更改存储过程的代码,使用他的人员甚至不需要知道这些变化;

  d、提高性能:使用存储过程比使用单独的SQL语句更快

  e、存在一些只能用在单个请求中的MYSQL元素和特性,存储过程可以使用他们来编写功能更强更灵活的代码

  即:使用存储过程有3个主要的好处:简单、安全、高性能

 

3、创建存储过程

  a、MYSQL 使用 CREATE PROCEDURE 语句创建存储过程

    CREATE PROCEDURE productpricing()

    BEGIN

      SELECT Avg(prod_price) AS priceaverage

      FROM products;

    END;

  说明: 存储过程名为:productpricing,使用CREATE PROCEDURE productpricing() 定义

      如果存储过程接受参数,它们将在()中列出

     BEGIN 和 END 语句用来限定存储过程体

 

4、临时更改MYSQL的分隔符

  a、默认的mysql语句分隔符为“;”

  b、Mysql命令行实用程序也使用”;“,作为语句分隔符

  c、如果命令行实用程序姚解释存储过程自身内也有“;”

  d、则他们最终不会成为存储过程的成分,这回使得存储过程中的SQL出现句法错误

  解决办法:

  临时更改命令行实用程序的语句分隔符

  DELIMITER //

  CREATE PROCEDURE productpricing()

  BEGIN

    SELECT Avg(prod_price) AS priceaverage

    FROM products;

  END;

  DELIMITER ; 

 

5、使用存储过程

  a、方法是:call productpricing();

  b、执行刚创建的存储过程并显示返回的结果

  c、存储过程实际上是一种函数,所以存储过程名后面有()符号

  d、查询存储过程

    show procedure status where db = '数据库名';

  e、删除存储过程

    1) 存储过程在创建之后,被保存在服务器上以供使用,直至被删除;

    2) 删除命令从服务器中删除存储过程

    3) 使用以下语句删除存储过程:

      DROP PROCEDURE productpricing;——删除创建的存储过程

  f、使用参数与变量

    1)存储过程一般并不显示结果,而是把结果返回给指定的变量

    2)该变量用来临时存储数据

    3)所有MYSQL 变量都必须以@开始

    4)使用SET语句设置变量

     如:SET @num=1;

  实例1:

    CREATE PROCEDURE productpricing(

      OUT PL DECIMAL(8,2)                                 ——OUT :传出参数,PL:参数,DECIMAL:是8位带有2为小数的数值

    )

    BEGIN

      SELECT Min(prod_price)

      INTO PL                ——将查询的值放到PL

      FROM products;

    END;

 

  实例2:

    CREATE PROCEDURE ordertotal(

      IN onumber INT,             ——IN :传入参数

      OUT ototal DECIMAL(8,2)                                 ——OUT :传出参数,ototal:参数,DECIMAL:是8位带有2为小数的数值

    )

    BEGIN

      SELECT Sum(item_price*quantity)

      FROM orderitems

      WHERE oder_num = onumber 

      INTO ototal

    END;

   调用这个存储过程:

    call ordertotal(001,@total);

   显示变量的值

    SELECT @total;

  

posted on 2021-01-31 21:07  肥涵  阅读(81)  评论(0编辑  收藏  举报