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的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句
MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...
- Mysql 游标初识
MySql 游标初识 认识 游标(cursor), 按字面意思可理解为, 游动的标识, 或者叫做"光标", 这样更容易理解. 就好比现有一张表存储了n行记录, 然后我想每次取出一行 ...
- Mysql:初识MySQL
转载自:https://www.cnblogs.com/hellokuangshen/archive/2019/01/09/10246029.html Mysql:初识MySQL 只会写代码的是码农: ...
- Mysql(一):初识数据库
一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...
- MySQL之初识数据库
一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...
- 【MySQL】初识数据库及简单操作
一.数据库概述 1.1 什么是数据(Data) 描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音.语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机. ...
- python之路--MySQL数据库初识
一 . MySQL安装 # 下载MySQL地址 https://dev.mysql.com/downloads # 要选稳定的,不要选最新的,稳定的就是半年以上没有出现过bug 现在5.6.43为绝大 ...
- 3 MySQL数据库--初识sql语句
1.初识sql语句 服务端软件 mysqld SQL语句:后面的分号mysql -uroot -p123 操作文件夹(库) 增 create database db1 charset utf8; 查 ...
- MySQL数据库初识
认识数据库 1 什么是数据(Data) 描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音.语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机 在计算机中 ...
随机推荐
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于WIFI模块AT指令TCP透传方式,定时访问升级(含有数据校验)
实现功能概要 定时使用http访问云端的程序版本,如果版本不一致,然后通过http下载最新的升级文件,实现升级. 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说明) 一,下载BootL ...
- 渗透测试工具Nmap篇
Nmap是一款网络扫描和主机检测的非常有用的工具. Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器.它可以适用于winodws,linux,mac等操作系统.Nmap ...
- md5-js加密
JS-MD5加密/html页面使用 大家都知道,传输明文信息很不安全,尤其像密码.卡号等这些敏感私密的信息,更不能暴露出去.在这里给大家介绍一种在前端JS中的MD5加密算法(因为要匹配的后台数据是MD ...
- nginx 实际部署配置文件示例
user nobody; worker_processes ; error_log logs/error.log; pid logs/nginx.pid; events { worker_connec ...
- haproxy 配置文件详解 之 frontend
配置示例: frontend www bind *: mode http option httplog option forwardfor option httpclose log global #a ...
- Centos7之搜索命令locate
locate命令[1] 1.#locate命令 所搜索的后台数据库 2.updatedb 更新数据库 3.操作 [root@localhost ~]# ls 222 anaconda-ks.cfg ...
- how to write your first linux device driver
how to write your first linux device driver 0. environment-ubuntu 1804 64bit 1. apt-get install linu ...
- 045 用户登录功能01----JWT和后台代码
(1)有状态登录概述 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session. 例如登录:用户登录后,我们把登录者 ...
- Linux命令中service的用法
用途说明 service命令用于对系统服务进行管理,比如启动(start).停止(stop).重启(restart).查看状态(status)等.相关的命令还包括chkconfig.ntsysv等,c ...
- 破解Charles4.2.7版本
软件下载地址:请点我 密码:sats dmg软件解密密码是:xclient.info 激活方法 1.将 Charles.app 拖至 应用程序 文件夹 2.将 keygen.jar 拖至 桌面 3.打 ...