mysql 存储过程 流程控制_Mysql(10)_存储过程与流程控制

一  存储过程与if语句

--------------------------------Procedure structure for `proc_adder`------------------------------

DROP PROCEDURE IF EXISTS`proc_adder`;

DELIMITER $$CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT sum int)BEGIN#Routine body goes here...DECLARE c int;if a is null then set a = 0;end if;if b is null then set b = 0;end if;set sum = a +b;END$$

DELIMITER ;SET @b=5; --把5传给第二个参数b

CALL proc_adder(2,@b,@s); --调用存储过程

SELECT @s as sum;

CALL proc_adder(3,3,@s);SELECT @s as sum;

--------------------------------Procedure structure for `proc_adder`------------------------------

DROP PROCEDURE IF EXISTS`proc_if`;

DELIMITER $$CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_if`(IN type int)BEGIN#Routine body goes here...DECLARE c VARCHAR(500);IF type =0 THEN

SET c= 'param is 0';

ELSEIF type= 1 THEN

SET c='param is 1';ELSE

SET c='param is others,not 0 or 1';END IF;SELECTc;END$$

DELIMITER ;SET @type =1;

CALL proc_if(@type)

ff31539c38dea2d9fa0ca8712bd7a28f.png

二  存储过程与case语句

--------------------------------Procedure structure for `proc_adder`------------------------------

DROP PROCEDURE IF EXISTS`proc_case`;

DELIMITER $$CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_case`(IN type int)BEGIN#Routine body goes here...DECLARE c VARCHAR(500);CASEtypeWHEN 0 THEN

SET c='param is 0';WHEN 1 THEN

SET c = 'param is 1';ELSE

SET c = 'param is others,not 0 or 1';END CASE;SELECTc;END$$

DELIMITER ;SET @type =1;

CALL proc_case(@type)

97904b51f514f988aade0ed176c3ded3.png

三 存储过程与while

--------------------------------Procedure structure for `proc_adder`------------------------------

DROP PROCEDURE IF EXISTS`proc_while`;

DELIMITER $$CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_while`(IN n int)BEGIN#Routine body goes here...DECLARE i INT;DECLARE s INT;SET i = 0;SET s = 0;WHILE i <=n DOSET s = s+i;SET i = i+1;END WHILE;SELECTs;END$$

DELIMITER ;SET @n =100;

CALL proc_while(@n);

aa49e50e88d42c9bf77d58db02172d33.png

存储过程其实类似于编程语言中的函数,mysql中也有函数,区别在于函数必须有返回值,而存储过程没有。存储过程的参数有in,out,inout类型,而函数的参数只能是in类型的。如有函数需要从其他类型的数据库迁移到mysql,那么可能需要将函数改造成存储过程。

存储过程和函数是从mysql5.0开始支持的。存储过程和函数是事先经过编译并存储在数据库中的一段sql语句的集合,调用存储过程和函数可以简化应用开发r人员的很多工作,减少数据在数据库和应用服务器之间的传输,对提高数据的处理效率是有好处的

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

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

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

对于mysql的表,能存储多少数据的问题。在工作中遇到过,两千万是可以的!,不过在插入两千万数据的表,或者是删除数据,花费的时间比较长。这个在工作也遇到过。

对于mysql和Oracle的比较。其实mysql学好了,Oracle也就学好了。很多东西几乎是一样的。而且mysql是开源的,安装后大概153M

而oracle却好几个G。运行oracle,需要很好的设备来支撑它的性能,其实一般的企业,用mysql足够了!!!如果只是针对几百人的用户系统,mysql完全可以满足需要。

平心而论,自己对于mysql数据库,了解多少!!!很多东西需要学习,自己会的只是基础。等以后用到,一些语句,翻翻博客套用就可以了。平时多看自己写的博客,复习。知道有这么回事!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值