Mysql 流程控制

认识

从我目前所接触的编程语言,C, R, VB, Python, Javascript...,来看, 无非就是变量, 表达式, 流程控制(顺序, 分支, 循环), 封装了一些更高级的数据结构而已, 区别在于应用场景和语言特性, 其实逻辑都是相同的, 唯手熟尔.

选择结构 if-else; case

-- if-esle 语法

IF search_condition THEN

statement_list;

[ELSEIF search_condition THEN

statement_list; ....]

ELSE

statement_list;

END IF;

-- CASE 语法

CASE case_value

WHEN when_value THEN statement_list

[WHEN when_value THEN statement_list]...

[ELSE statement_list]

END CASE;

OR:

CASE

WHEN search_condition THEN statement_list

[WHEN search_condition THEN statement_list] ...

[ELSE statement_list]

END CASE

-- 随机推送一句表白

drop procedure if exists sayLove;

delimiter //

create procedure sayLove()

begin

declare num int default 0;

-- 生成一个1-5间的随机数

set num := round(rand()*5);

-- 判断

case num

when 1 then select "人生若只如初见";

when 2 then select "春风十里不如你";

when 3 then select "爱你就像爱生命";

else

select "今晚的月色真美";

end case;

end //

delimiter ;

call sayLove();

-- out

mysql> call sayLove();

+----------------+

| 今晚的月色真美 |

+----------------+

| 今晚的月色真美 |

+----------------+

1 row in set (0.09 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call sayLove();

+----------------+

| 爱你就像爱生命 |

+----------------+

| 爱你就像爱生命 |

+----------------+

1 row in set (0.14 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call sayLove();

+----------------+

| 春风十里不如你 |

+----------------+

| 春风十里不如你 |

+----------------+

1 row in set (0.11 sec)

CASE 能实现的, IF-ELSE也完全能, 只是提供了更多的选择而已.

-- 用 if-esle实现

drop procedure if exists sayLove;

delimiter //

create procedure sayLove()

begin

declare num int default 0;

-- 生成一个1-5间的随机数

set num := round(rand()*5);

-- 判断

if num=1 then select "人生若只如初见";

elseif num=2 then select "春风十里不如你";

elseif num-3 then select "爱你就像爱生命";

else

select "今晚的月色真美";

end if;

end //

delimiter ;

call sayLove();

MySql 循环

WHILE ... DO ... END WHILE 叫什么"当"型循环, 满足条件才进入循环体

LOOP ... LEAVE...END LOOP "直到型循环"

REPEAT ... UNTIL ... END REPEAT

while ...do ...循环

while search_condition do

statement_list;

end while;

repeat ...until ...循环

repeat

statement_list;

until search_condition;

end repeat;

loop ...leave 循环

[begin_label:] loop

statement_list;

leave [begin_label];

end loop [end_label];

循环-案例 1+2+...n

-- while 实现 求1+2+3+..n和

-- 自己容易混的点: 忘在结尾; end; 变量忘了 set;

-- 传入参数: in 传入值; out: 传入变量去接收返回的值; inout 传入又输出

drop procedure if exists sumN_while;

delimiter //

create procedure sumN_while(in n int)

begin

declare total int default 0;

declare i int default 0;

-- while ...do ....

while i <= n do

set total := total + i;

set i := i + 1;

-- 打印一下结果

end while;

select concat("1+2+..", n, "的和是:", total) as '输出啦';

end //

delimiter ;

call sumN_while(100);

-- out

call sumN_while(100);

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

+----------------------+

| 输出啦 |

+----------------------+

| 1+2+..100的和是:5050 |

+----------------------+

1 row in set (0.10 sec)

同样同 repeat ... until ..实现, 顺便练习下 out 类型参数

-- repeat 实现 1+2+..n的和

drop procedure if exists sumN_repeat;

delimiter //

-- 设置传入out型参数变量, 用来接收输出值

create procedure sumN_repeat(out total int)

begin

xxxx

end //

delimiter ;

drop procedure if exists sumN_repeat;

delimiter //

-- 设置再传入out型参数变量, 用来接收输出值

create procedure sumN_repeat(in n int)

begin

declare i int default 0;

declare total int default 0;

-- repeat ... until ...

repeat

set total := total + i;

set i := i + 1;

-- 退出条件 until..True时才退出哦, 注意跟while的区别

until i > n

end repeat;

-- 在内部打印出结果

select total;

end //

delimiter ;

-- out

call sumN_repeat(100);

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

+-------+

| total |

+-------+

| 5050 |

+-------+

1 row in set (0.09 sec)

用out类型参数.

-- repeat 实现 1+2+..n的和

drop procedure if exists sumN_repeat;

delimiter //

-- 设置再传入out型参数变量, 用来接收输出值

create procedure sumN_repeat(in n int, out total int)

begin

declare i int default 0;

set total := 0; -- 顺序: 先decalre 再是set, 不能乱,兄弟

-- repeat ... until ...

repeat

set total := total + i;

set i := i + 1;

-- 退出条件 until..注意是条件为True时退出哦

until i > n

end repeat;

end //

delimiter ;

-- set @ret := 0;

-- call sumN_repeat(100, @ret);

-- select @ret;

-- out

mysql> set @ret := 0; -- 这个全局变量 @ret 用来接收过程的 total值哦

Query OK, 0 rows affected (0.00 sec)

mysql> call sumN_repeat(10000, @ret);

Query OK, 0 rows affected (0.04 sec)

mysql> select @ret;

+----------+

| @ret |

+----------+

| 50005000 |

+----------+

1 row in set (0.08 sec)

再用 loop....leave 来整一波

-- loop ...leave ... 来实现 求 1+2+..n 的和

drop procedure if exists sumN_loop;

delimiter //

create procedure sumN_loop(in n int, out total int)

begin

declare i int default 0;

set total := 0;

-- loop, 先取一个标签名, 再写退出条件, if-then...

myLoop: loop

if i > n then

leave myLoop;

end if;

set total := total + i;

set i := i + 1;

end loop;

end //

delimiter ;

-- out

mysql> set @ret := 0;

Query OK, 0 rows affected (0.00 sec)

mysql> call sumN_loop(100, @ret);

Query OK, 0 rows affected (0.00 sec)

mysql> select @ret;

+------+

| @ret |

+------+

| 5050 |

+------+

1 row in set (0.11 sec)

小结MySql控制流

补充: 存储过程的参数声明

in 类型: 要求在调用的时候, 接收从外界传入一个值.

out 类型: 要求在调用时, 传入一个变量去接收procedure的"返回值"

inout 类型: 输入输出型

补充: MySql变量定义

在存储过程内, 用: declare 变量名 类型 [default 值]; 类似"局部变量"

在外边运行, 用: @变量 := 值; 类似"全局变量", 注意MySql的标准赋值符号是 " := ", 而 "=" 只有在update 和set时表示赋值, 其余场景都是 "等号".

选择结构(if, case):

if - elseif- esle -end if;

case value when value1 then ; when value2 ...then .. else .. . end case;

循环结构(while, repeat, loop)

while .... do .... end while;

repeat ... until .... end repeat;

myLoop: loop ..... if ... then leave myLoop; end if ; ..... end loop;

mysql控制结构_Mysql 控制结构初识相关推荐

  1. MySQL 基础 ———— 流程控制结构

    引言 MySQL 中的流程控制作为基础知识的最后一块拼图,显得并不是特别重要,而且,在实际生产开发中,也往往不需要通过它来进行程序的控制,那么为什么还要学习它呢?我认为有以下几点: 1.知识的完整性: ...

  2. MySQL之流程控制结构(分支,循环)

    流程控制结构 顺序结构:程序从上往下依次执行 分支结构:程序从两条或多条路径中选择一条去执行 ①IF函数:实现简单的双分支 IF(条件,结果1,结果2) ②CASE结构:相当于switch或多重if, ...

  3. mysql数据库初识实训总结_MySQL数据库初识(基础语句)

    初识Mysql 认知 数据库:DB 所有的数据存放的仓库 每一个文件夹也是数据库 数据库管理员:DBA 管理数据库软件 数据库服务器:一台跑着一个数据库管理软件的机器 表:文件,一张存储了数据的表 数 ...

  4. mysql管理利器sqlyogent初识(php建立数据库)_MySql管理利器SQLyogEnt初识(php建立数据库)...

    今天我建立的数据库名叫"mydb",数据库里包含一个表"news".接下来我们就打开SQLyogEnt实际操作一下. 第一,打开SQLyogEnt,由于要运行m ...

  5. MySQL学习笔记(B站网课:MySQL_基础+高级篇- 数据库 -sql -mysql教程_mysql视频_mysql入门_尚硅谷)已完结

    目录 一.为什么要学习数据库 二.数据库的相关概念 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍和安装 MySQL服务的启动和停止 MySQL服务的登录和退出 MySQL的常见命 ...

  6. jspstudy启动mysql失败_MySql启动数据库设置初始密码

    这一小节介绍在Mac OS.Linux.Windows上启动关闭重启MySQL服务,以及部分图形化界面对服务的操控.安装完成后,可以使用 service 命令启动 mysql 服务,在Mac上serv ...

  7. java控制结构_java控制结构WORD

    Java 基础及控制结构练习题 1.有一函数 ?????≤- x x x x x y 301033035 23 写一程序,输入x,输出y 值. import java.util.Scanner; pu ...

  8. 阿里云mysql 分布式_MySQL大型分布式集群

    本套课程将通过分布式集群和分库分表两部分内容进行讲解 1.主要解决针对大型网站架构中持久化部分中,大量数据存储以及高并发访问所带来是数据读写问题.分布式是将一个业务拆分为多个子业务,部署在不同的服务器 ...

  9. php程序控制结构,PHP 控制结构

    PHP 控制结构 由 学院君 创建于10个月前, 最后更新于 7个月前 版本号 #1 1922 views 0 likes 0 collects 所谓控制结构也叫流程控制,在计算机程序设计中,典型的流 ...

  10. 在线打mysql代码_mysql 在线alter table要留神_mysql

    mysql 在线alter table要小心 mysql 5.6之前, alter table操作对可用性有巨大的冲击(除了纯改表名.不影响任何数据的alter table).它的原理是, 0. al ...

最新文章

  1. 零基础入门学习Python(19)-内嵌函数和闭包
  2. 什么叫大地高_等电位箱有什么用?
  3. python是什么编程教程-编程python是什么_谁的Python教程最好?
  4. LeetCode 454 4Sum II(哈希法)
  5. 重温经典之排序 java实现
  6. angularJS 上传multipart/form-data
  7. opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框
  8. 开源是如何让Android成为移动市场大佬的?
  9. Linux远程管理协议(RFB、RDP、Telnet和SSH)
  10. 【AD】Altium designer IPC快速创建封装
  11. SSM商城系统开发笔记-配置01-web.xml
  12. 开发机器学习应用程序的步骤
  13. 程序员代码大全c语言,程序员大神教你,新手零基础学C语言编程代码训练
  14. ESP8266 WiFi模块和单片机,电脑连接
  15. 详解51系列单片机引脚及功能
  16. Jersey是一个什么框架,价值在哪里?
  17. arcgis做dijkstra_GIS最短路径分析中Dijkstra算法的优化
  18. 操作系统作业之银行家算法(c语言实现)
  19. 是时候复习一下响应式设计了
  20. mysql个人办公使用_Access数据库是给办公人员用的~闲杂人等不要来凑热闹

热门文章

  1. docker容器启动失败解决办法
  2. IOS多线程实现多图片下载(一)
  3. 阿里春招Android面经
  4. express获取参数的几种方法
  5. 关于编辑区无法调用chekbox的问题
  6. Spring with multiple transaction managers
  7. Mac Brew Uninstall MySql
  8. HP刀片带外管理系统OA各功能实例示范
  9. matlab2014 下的 libsvm 安装
  10. 命令dd 及简单应用