本篇文章给大家带来的内容是关于mysql存储过程的详细介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
1、什么是存储过程
为以后的使用而保存的一条或多条MySQL语句的集合。
存储过程思想上就是数据库 SQL 语言层面的代码封装与重用。
(相关推荐:MySQL教程)
2、为什么要使用存储过程
-
把处理封装在容易使用的单元中,简化复杂的操作
-
防止错误保证了数据的一致性
-
简化对变动的管理。(修改对应表名、列名等修改对应存储过程的代码,对于使用的人不需要知道变化)
-
提高性能
-
灵活
总的来说是简单、安全、高性能
缺点:
-
编写比SQL语句复杂
-
权限问题(可能无权、一般都是使用存储过程、没有创建存储过程的权限)
3、创建存储过程
CREATE PROCEDURE productpricing()BEGINSELECT Avg(prod_price) AS priceaverageFROM products;END
注意:在命令行中输入的问题
mysql> delimiter //mysql> CREATE PROCEDURE productpricing() -> BEGIN -> SELECT Avg(prod_price) AS priceaverage -> FROM products; -> END //
4、使用存储过程
存储过程实际上是一种函数
CALL productpricing();
4、删除存储过程
drop procedure productpricing; drop procedure if EXISTS productpricing;
5、使用参数
一般,存储过程并不显示结果,而是把结果返回给你指定的变量
变量(variable)内存中一个特定的位置,用来临时存储数据。
CREATE PROCEDURE productpricing( OUT p1 DECIMAL(8,2), OUT ph DECIMAL(8,2), OUT pa DECIMAL(8,2))BEGINSELECT MIN(prod_price)INTO p1FROM products;SELECT MAX(prod_price)INTO phFROM products;SELECT avg(prod_price)IN<strong>本文来源gaodaima#com搞(代@码$网6</strong>TO paFROM products;END;
关键字OUT指出相应的参数用来从存储过程传出 一个值(返回给调用者)。
MySQL支持IN(传递给存储过程)、
OUT(从存 储过程传出,如这里所用)
INOUT(对存储过程传入和传出)类型的参 数。
变量名 所有MySQL变量都必须以@开始。
调用存储过程
call productpricing(@pricelow,@pricehign,@priceaverage);
查询
SELECT @priceaverage;
SELECT @priceaverage,@pricehign,@pricelow;
使用in和out
创建
CREATE PROCEDURE ordertotal( IN onumber INT, OUT ototal DECIMAL(8,2))BEGINSELECT sum(item_price*quantity)FROM orderitemsWHERE order_num = onumberINTO ototal;END;
调用
call ordertotal(20005,@total);
查询
select @total;
6、建立智能存储过程
迄今为止使用的所有存储过程基本上都是封装 MySQL简单的SELECT语句。虽然它们全都是有效的存储过程例子,但它们所能完成的工作你直接用这些被封装的语句就能完成(如果说它们还能带来更多的东西。那就是使事情更复杂)。只有在存储过程内包含业务规则和智能处理时,它们的威力才真正显现出来。
考虑这个场景。你需要获得与以前一样的订单合计,但需要对合计增加营业税,不过只针对某些顾客(或许是你所在州中那些顾客)。那么,你需要做下面几件事情: 1、获得合计(和以前一样) 2、把营业税有条件的添加到合计 3、返回合计(带或不带税的)