mysql控制结构_Mysql 控制结构初识
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 控制结构初识相关推荐
- MySQL 基础 ———— 流程控制结构
引言 MySQL 中的流程控制作为基础知识的最后一块拼图,显得并不是特别重要,而且,在实际生产开发中,也往往不需要通过它来进行程序的控制,那么为什么还要学习它呢?我认为有以下几点: 1.知识的完整性: ...
- MySQL之流程控制结构(分支,循环)
流程控制结构 顺序结构:程序从上往下依次执行 分支结构:程序从两条或多条路径中选择一条去执行 ①IF函数:实现简单的双分支 IF(条件,结果1,结果2) ②CASE结构:相当于switch或多重if, ...
- mysql数据库初识实训总结_MySQL数据库初识(基础语句)
初识Mysql 认知 数据库:DB 所有的数据存放的仓库 每一个文件夹也是数据库 数据库管理员:DBA 管理数据库软件 数据库服务器:一台跑着一个数据库管理软件的机器 表:文件,一张存储了数据的表 数 ...
- mysql管理利器sqlyogent初识(php建立数据库)_MySql管理利器SQLyogEnt初识(php建立数据库)...
今天我建立的数据库名叫"mydb",数据库里包含一个表"news".接下来我们就打开SQLyogEnt实际操作一下. 第一,打开SQLyogEnt,由于要运行m ...
- MySQL学习笔记(B站网课:MySQL_基础+高级篇- 数据库 -sql -mysql教程_mysql视频_mysql入门_尚硅谷)已完结
目录 一.为什么要学习数据库 二.数据库的相关概念 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍和安装 MySQL服务的启动和停止 MySQL服务的登录和退出 MySQL的常见命 ...
- jspstudy启动mysql失败_MySql启动数据库设置初始密码
这一小节介绍在Mac OS.Linux.Windows上启动关闭重启MySQL服务,以及部分图形化界面对服务的操控.安装完成后,可以使用 service 命令启动 mysql 服务,在Mac上serv ...
- java控制结构_java控制结构WORD
Java 基础及控制结构练习题 1.有一函数 ?????≤- x x x x x y 301033035 23 写一程序,输入x,输出y 值. import java.util.Scanner; pu ...
- 阿里云mysql 分布式_MySQL大型分布式集群
本套课程将通过分布式集群和分库分表两部分内容进行讲解 1.主要解决针对大型网站架构中持久化部分中,大量数据存储以及高并发访问所带来是数据读写问题.分布式是将一个业务拆分为多个子业务,部署在不同的服务器 ...
- php程序控制结构,PHP 控制结构
PHP 控制结构 由 学院君 创建于10个月前, 最后更新于 7个月前 版本号 #1 1922 views 0 likes 0 collects 所谓控制结构也叫流程控制,在计算机程序设计中,典型的流 ...
- 在线打mysql代码_mysql 在线alter table要留神_mysql
mysql 在线alter table要小心 mysql 5.6之前, alter table操作对可用性有巨大的冲击(除了纯改表名.不影响任何数据的alter table).它的原理是, 0. al ...
最新文章
- 零基础入门学习Python(19)-内嵌函数和闭包
- 什么叫大地高_等电位箱有什么用?
- python是什么编程教程-编程python是什么_谁的Python教程最好?
- LeetCode 454 4Sum II(哈希法)
- 重温经典之排序 java实现
- angularJS 上传multipart/form-data
- opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框
- 开源是如何让Android成为移动市场大佬的?
- Linux远程管理协议(RFB、RDP、Telnet和SSH)
- 【AD】Altium designer IPC快速创建封装
- SSM商城系统开发笔记-配置01-web.xml
- 开发机器学习应用程序的步骤
- 程序员代码大全c语言,程序员大神教你,新手零基础学C语言编程代码训练
- ESP8266 WiFi模块和单片机,电脑连接
- 详解51系列单片机引脚及功能
- Jersey是一个什么框架,价值在哪里?
- arcgis做dijkstra_GIS最短路径分析中Dijkstra算法的优化
- 操作系统作业之银行家算法(c语言实现)
- 是时候复习一下响应式设计了
- mysql个人办公使用_Access数据库是给办公人员用的~闲杂人等不要来凑热闹