码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-12-08 17:54:15      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:处理   case语句   int   通过   procedure   技术   企业   之间   存储过程   


一  存储过程与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;
    SELECT c;
END
$$
DELIMITER ;

SET @type =1;
CALL proc_if(@type)

技术分享图片


 

二  存储过程与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);
    CASE type 
    WHEN 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;
    SELECT c;
END
$$
DELIMITER ;

SET @type =1;
CALL proc_case(@type)

 

 技术分享图片


 

三 存储过程与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 DO
     SET s = s+i;
     SET i = i+1;
    END WHILE;
    SELECT s;
END $$
DELIMITER ;

SET @n =100;
CALL proc_while(@n);

技术分享图片

 

       存储过程其实类似于编程语言中的函数,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数据库,了解多少!!!很多东西需要学习,自己会的只是基础。等以后用到,一些语句,翻翻博客套用就可以了。平时多看自己写的博客,复习。知道有这么回事!!

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

标签:处理   case语句   int   通过   procedure   技术   企业   之间   存储过程   

原文地址:https://www.cnblogs.com/sunnybowen/p/10088237.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!