MySQL使用存储过程

存储过程简单来说,就是为了以后的使用而保存的一条或多条MySQL语句的集合。

为什么使用存储过程

  • 通过把处理封装在容易使用的单元中,简化复杂的操作
  • 由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果所有开发人员和应用程序都使用同一存储过程,则所使用的代码都是相同的。 这一点延伸就是防止错误。需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性。
  • 简化对变动的管理。如果表名、列名或业务逻辑有变化,只需要更改存储过程的代码。使用它的人员甚至不需要这些变化。 这一点的延伸就是安全性。通过存储过程限制对基础数据的访问,减少了数据讹误的机会。
  • 提高性能。因为使用存储过程比使用单独的SQL语句要快。
  • 存在一些只能用在单个请求中的MySQL元素和特性,存储过程可以使用他们来编写功能更强更灵活的代码。

使用存储过程

创建存储过程

使用 CREATE PROCEDURE定义存储过程。如果存储过程接受参数,它们将在存储过程名称括号中列举出来。BEGINEND语句来限定存储过程体。

//默认的MySQL命令行分隔符是; "DELIMITER  //"告诉命令行实用程序使用"//"作为新的语法结束分隔符。
DELIMITER //
CREATE PROCEDURE productpricing()
BEGIN
	SELECT Avg(prod_price) AS priceaverage
    FROM products;
END //

使用

CALL productpricing();

删除存储过程

DROP PROCEDURE productpricing;

使用参数

变量:内存中一个特定的位置,用来临时存储数据,都必须以@开始。

参数的数据类型: 存储过程的参数允许的数据类型与表中使用的数据类型相同。记录集是不允许的类型,因此,不能通过一个参数返回多个行和列。

OUT指出相应的参数用来从存储过程传出一个值(返回给调用者),IN (传递给存储过程),INOUT(对存储过程传入传出)

通过关键字INTO将查询结果保存到相应的变量。

//定义带参数的存储过程
DELIMITER //
CREATE PROCEDURE productpricing(
	OUT pl decimal(8,2),
	OUT ph decimal(8,2),
	OUT pa decimal(8,2)
)
BEGIN
	SELECT Min(prod_price) INTO pl FROM products;
	SELECT Max(prod_price) INTO ph FROM products;
	SELECT Avg(prod_price) INTO pa FROM products;
END //    

//调用带参数的存储过程 
CALL productpricing(@pricelow,
					@pricehigh,
                    @priceaverage
);   

//显示调用结果
SELECT @pricelow,@pricehigh;
DELIMITER //
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(20009,@total);
SELECT @total;

检查存储过程

SHOW PROCEDURE STATUS;查看所有的存储过程,可使用LIKE限制

SHOW PROCEDURE STATUS LIKE 'ordertotal';
//查看创建此存储过程的语句
SHOW CREATE PROCEDURE ordertotal;

结果:

posted @ 2020-10-28 17:55  _大可乐  阅读(154)  评论(0编辑  收藏  举报