第二节 使用存储过程

本文介绍了MySQL存储过程的基本概念,包括其在简化操作、提升性能和数据一致性方面的优势。讲解了如何创建、调用存储过程,使用参数,以及创建智能存储过程的过程,同时提到了检查存储过程的方法。
摘要由CSDN通过智能技术生成

使用存储过程

1. 存储过程

MySQL5之后的版本支持存储过程。

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

2. 为什么要使用

  1. 通过把处理封装在容易使用的单元中,简化复杂操作;
  2. 通过复用存储过程,防止因为步骤太多出现错误,保证数据的一致性;
  3. 简化对变动的管理,表名、列名或者业务逻辑变动,只需要更改存储过程,使用存储过程的人员不需要知道这些变化。
  4. 提高性能;
  5. 通过使用只能在单个请求中的Mysql元素或特性,可以写出更强大灵活的代码;

简而言之,更简单、安全,高性能

  1. 使用存储过程需要更多经验;
  2. 需要相应的创建权限;

3. 使用存储过程

3.1 执行存储过程

调用存储过程,CALL语句,CALL接收存储过程的名字以及需要传递给它的任意参数

在这里插入图片描述

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

存储过程可以显示结果,也可以不显示结果。

3.2 创建存储过程

在这里插入图片描述

创建名为productpricing的存储过程,用CREATE PROCEDURE语句,BEGIN和END语句用来限定存储过程体。

3.3 删除存储过程

DROP PROCEDURE productpricing

3.4 使用参数

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

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

调用

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

为了显示检索出的产品平均价格,可以如下:

SELECT @priceaverage

在这里插入图片描述

3.5 建立智能存储过程

-- Name: ordertotal
-- 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)
) COMMENT '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 total
	SELECT Sum(item_price*quantity)
	FROM orderitems
	WHERE order_num = onumber
	INTO total;
	
	-- Is this taxable?
	IF taxable THEN
		-- Yes, so add taxrate to the total
		SELECT total+(total/100*taxrate) INTO total;
	END IF;
	
	-- And fianlly, save to out variable
	SELECT total INTO ototal;
END;

分析一下以上代码:

  1. 增加了注释,在复杂性增加的存储过程中非常重要
  2. 在存储过程中定义了两个局部变量,使用DECLARE语句。DECIMAL(8,2)表示一个十进制数,总共有8位,其中2位小数部分。
  3. 用了一个IF语句检查taxable是否为真,如果为真则执行SELECT语句,增加营业税到局部变量total
  4. 最后执行SELECT语句,将局部变量保存到ototal中。

3.6 检查存储过程

SHOW CREATE PROCEDURE ordertotal;

SHOW语句可以获取创建存储过程的CREATE 语句

SHOW PROCEDURE STATUS LIKE 'ordertotal';

可以获取何时、由谁创建等详细的信息

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值