mysql持久化io的存储过程_[转载] Mysql中的存储过程

什么是存储过程

简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;

ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

有哪些特性

有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;

函数的普遍特性:模块化,封装,代码复用;

速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;

创建一个简单的存储过程

存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,功能就是计算输入参数a和b的结果,赋值给输出参数sum;

几点说明:

DELIMITER ;;:之前说过了,把默认的输入的结束符;替换成;;。

DEFINER:创建者;

1 ------------------------------

2 --Procedure structure for `proc_adder`

3 ------------------------------

4 DROP PROCEDURE IF EXISTS`proc_adder`;5 DELIMITER ;;6 CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT sum int)7 BEGIN

8 #Routine body goes here...9

10 DECLARE c int;11 if a is null then set a = 0;12 end if;13

14 if b is null then set b = 0;15 end if;16

17 set sum = a +b;18 END

19 ;;20 DELIMITER ;

执行以上存储结果,验证是否正确,如下图,结果OK:

set @b=5;

call proc_adder(2,@b,@s);select @s as sum;

5eea1023179ae4373c91de020efd85db.png

存储过程中的控制语句

IF语句:

1 ------------------------------

2 --Procedure structure for `proc_if`

3 ------------------------------

4 DROP PROCEDURE IF EXISTS`proc_if`;5 DELIMITER ;;6 CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_if`(IN type int)7 BEGIN

8 #Routine body goes here...9 DECLARE c varchar(500);10 IF type = 0 THEN

11 set c = 'param is 0';12 ELSEIF type = 1 THEN

13 set c = 'param is 1';14 ELSE

15 set c = 'param is others, not 0 or 1';16 END IF;17 selectc;18 END

19 ;;20 DELIMITER ;

d30b8b222d4144875cfc4d11b33839be.png

CASE语句:

1 ------------------------------

2 --Procedure structure for `proc_case`

3 ------------------------------

4 DROP PROCEDURE IF EXISTS`proc_case`;5 DELIMITER ;;6 CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_case`(IN type int)7 BEGIN

8 #Routine body goes here...9 DECLARE c varchar(500);10 CASEtype11 WHEN 0 THEN

12 set c = 'param is 0';13 WHEN 1 THEN

14 set c = 'param is 1';15 ELSE

16 set c = 'param is others, not 0 or 1';17 END CASE;18 selectc;19 END

20 ;;21 DELIMITER ;

6610d3a37f09e68b967e1d068ee4e0c8.png

循环while语句:

1 ------------------------------

2 --Procedure structure for `proc_while`

3 ------------------------------

4 DROP PROCEDURE IF EXISTS`proc_while`;5 DELIMITER ;;6 CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_while`(IN n int)7 BEGIN

8 #Routine body goes here...9 DECLARE i int;10 DECLARE s int;11 SET i = 0;12 SET s = 0;13 WHILE i <=n DO14 set s = s +i;15 set i = i + 1;16 END WHILE;17 SELECTs;18 END

19 ;;20 DELIMITER ;

c85a3f4b02937de68f48c004ece21c26.png

其它:略~

存储过程弊端

不同数据库,语法差别很大,移植困难,换了数据库,需要重新编写;

不好管理,把过多业务逻辑写在存储过程不好维护,不利于分层管理,容易混乱,一般存储过程适用于个别对性能要求较高的业务,其它的必要性不是很大;

...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值