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

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

时间: 2024-11-01 13:50:17

Mysql(10)_存储过程与流程控制的相关文章

MySQL-视图-触发器-事务-存储过程-函数-流程控制-索引与慢查询优化-06

目录 视图*** 什么是视图 为什么要用视图 如何生成视图 修改视图 --> 最好(千万)不要 关联表数据改动前 关联表数据改动之后 触发器 什么是触发器 触发条件 触发器语法结构 修改mysql的默认结束符(;) 触发器死循环 六个触发器的执行时机 新增前.新增后.删除前.删除后.更新前.更新后 NEW对象指代的就是当前记录(对象) 事务 ***** 什么是事务 事务的四大特性 ACID A:原子性 atomicity C:一致性 consistency I:隔离性 isolation D:持

mysql数据库之函数、流程控制

函数 注意与存储过程的区别,mysql内置的函数只能在sql语句中使用! 参考博客:http://www.cnblogs.com/linhaifeng/articles/7495918.html#_label2 CREATE TABLE blog ( id INT PRIMARY KEY auto_increment, NAME CHAR (32), sub_time datetime ); ? INSERT INTO blog (NAME, sub_time) VALUES ('第1篇','2

10、shell编程+流程控制+分支嵌套

SHELL 编程 shell 是一个命令解释器,侦听用户指令.启动这些指令.将结果返回给用户(交互式的shell) shell 也是一种简单的程序设计语言.利用它可以编写一些系统脚本. 查看本机shell 信息: cat /etc/shells     --查看本支持的shell echo $SHELL --查看当前支持的shell shell 在执行命令时,各种命令的优先级: 别名 -> 关键字 -> 函数 -> 内置命令 -> 脚本 别名:命令的另一种形式,有些情况下可以简化命

MySQL存储过程之流程控制

1. 条件分支IF-THEN-ELSE-END IF 1 CREATE PROCEDURE p12 (IN parameter1 INT) 2 BEGIN 3 DECLARE variable1 INT; 4 SET variable1 = parameter1 + 1; 5 IF variable1 = 0 THEN 6 INSERT INTO t VALUES (17); 7 END IF; 8 IF parameter1 = 0 THEN 9 UPDATE t SET s1 = s1 +

MySQL视图、触发器、事务、存储过程、内置函数、流程控制、索引

一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view teacher2course as #把下面查询的结果放在视图teacher2course中 select * from teacher inner join course on teacher.tid = course.teacher_id; 注意: 1.视图只有表结构,视图中的数据还是来源于原来的表

mysql存储过程、存储函数及流程控制

存储过程 一.基本语法 create procedure sp_name([proc_parameter[,...]]) [characteristic...]routine_body begin end sp_name 表示存储过程的名字 proc_parameter 存储过程参数例表[IN OUT INOUT]三个部分组成 其中IN 表示传进来的参数 其中OUT 表示传出去的参数 其中INOUT 表示传进来但最终传回的参数 routine_body 参数是SQL代码的内容(类似于触发器的fo

mysql流程控制、自定义函数、存储过程

修改结束符dilimiter $$ 分支 if 条件 then 语句 else if 条件 then 语句 else 语句 end if; 循环 while 条件 do 循环体 end while; 用户自定义变量 典型的变量:字段名就是变量,还有一些系统内置的变量 用户自定义变量需要使用 @作为变量名的前缀,用于区分是否是系统内置变量! set 变量名=变量值! //赋值set @height=10; 取值 //select @height; 系统内置函数 rand(),生成随机数的函数,得到

MySQL之视图、触发器、事务、存储过程、函数 流程控制

阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部都做了,也就是说它想要完成一件事,以后想开发的人,例如想写python程序的人,你就专门的写你自己的python程序,以后凡是关于数据的增删改查,全部都在MySQL里面完成,也就是说它想实现一个数据处理与应用程序的一个完全的解耦和状态,比如说,如果我是个应用程序员,我想要查询数据,我不需要自己写sql语句,只需要调用mysql封装好的一些功能,直

mysql基础教程(四)-----事务、视图、存储过程和函数、流程控制

事务 概念 事务由单独单元的一个或多个SQL语句组成,在这 个单元中,每个MySQL语句是相互依赖的.而整个单独单 元作为一个不可分割的整体,如果单元中某条SQL语句一 旦执行失败或产生错误,整个单元将会回滚.所有受到影 响的数据将返回到事物开始以前的状态:如果单元中的所 有SQL语句均执行成功,则事物被顺利执行. 存储引擎 概念 在mysql中的数据用各种不同的技术存储 在文件(或内存)中. 查看 通过 show engines: 来查看mysql支持的存储引擎. 常见引擎 在mysql中用的