【DataBase】MySQL 28 流程控制
一、分支结构
1、IF函数
语法:
IF(表达式1, 表达式2, 表达式3)
类似三元运算符,表达式1返回True Or False
True执行表达式2,False执行表达式3
IF实现多分枝结构
IF 条件 THEN 语句;
ELSEIF 条件 THEN 语句;
ELSEIF 条件 THEN 语句;
... ...
ELSE 语句;
END IF;
只能应用在BEGIN & END 中
2、CASE结构
用于等值判断处理,也可以多判断处理
CASE 变量、字段、函数、表达式
WHEN 要判断的值1 THEN 返回值1或者语句
WHEN 要判断的值2 THEN 返回值2或者语句
WHEN 要判断的值3 THEN 返回值3或者语句
... ...
ELSE 返回值N或者语句
END
不是等值判断,以条件判断的语法:
CASE WHEN 条件1 THEN 返回值1或者语句
WHEN 条件2 THEN 返回值2或者语句
WHEN 条件3 THEN 返回值3或者语句
... ...
ELSE 返回值N或者语句 END
二、分支案例:
成绩分级
DELIMITER $ CREATE PROCEDURE scoreCase(IN score INT);
BEGIN
CASE
WHEN score >= 90 AND score <= 100 THEN SELECT 'A';
WHEN score >= 80 THEN SELECT 'B';
WHEN score >= 60 THEN SELECT 'C';
ELSE SELECT 'D';
END CASE;
END $
调用
CALL scoreCase(77);
使用多重IF
DELIMITER $ CREATE FUNCTION scoreByIf(score INT) RETURNS CHAR
BEGIN
IF score >= 90 AND score <= 100 THEN RETURN 'A';
ELSEIF score >= 80 THEN RETURN 'B';
ELSEIF score >= 60 THEN RETURN 'C';
ELSE RETURN 'D';
END IF;
END $
调用
SELECT scoreByIf(80)
三、循环结构
三种循环类型:
WHILE、LOOP、REPEAT
循环控制:
iterate == continue 继续,结束本次循环,进入下一次循环
leave == break ,跳出当前的循环
WHILE语法:
[标签 :] WHILE 循环条件 DO
循环体内的逻辑
END WHILE [标签];
LOOP语法:
[标签 :] LOOP
循环体内的逻辑
END LOOP[标签];
REPEAT语法:
[标签 :] REPEAT
循环体内的逻辑
UTIL 结束循环的条件
END REPEAT [标签];
四、循环案例:
批量插入ADMIN表中
DELIMITER $;
CREATE PROCEDURE batchByWhile(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1; WHILE i <= insertCount DO
INSERT INTO admin(`username`,`password`) VALUES('AAAA','1122');
SET i = i + 1;
END WHILE;
END
调用
CALL batchByWhile(777);
带标签的处理:
TRUNCATE admin; DELIMITER $;
CREATE PROCEDURE batchByWhile2(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1; r1:WHILE i <= insertCount DO
INSERT INTO admin(`username`,`password`) VALUES('AAAA','1122');
IF i >= 30 THEN LEAVE r1;
END IF;
SET i = i + 1;
END WHILE r1;
END $
调用:
CALL batchByWhile2(100);
使用迭代处理:
DELIMITER $;
CREATE PROCEDURE batchByWhile3(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1; r1:WHILE i <= insertCount DO
SET i = i + 1;
IF MOD(i, 2) != 0 THEN ITERATE r1;
END IF;
INSERT INTO admin(`username`,`password`) VALUES('AAAA','1122');
END WHILE r1;
END $
调用
CALL batchByWhile3(222);
【DataBase】MySQL 28 流程控制的更多相关文章
- Database(Mysql)发版控制二
author:skate time:2014/08/18 Database(Mysql)发版控制 The Liquibase Tool related Database 一.Installation ...
- MySQL数据库----流程控制
流程控制 1.条件语句 举例一 delimiter // CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = 1 THE ...
- MySQL 存储过程 -流程控制的使用
#五.流程控制的使用 #1.IF 使用 create PROCEDURE iftest1() BEGIN DECLARE a int DEFAULT 10; -- IF (a>1 &&a ...
- MySql存储过程及MySql常用流程控制语法
/* 该代码是创建了一个名叫"p4"的存储过程并设置了s1,s2,s3两个int型一个varchar型参数,还可以是其他数据类型,内部创建了x1,x2两个变量 DELIMITER是 ...
- mysql之流程控制
目录 分支结构 循环结构 分支结构: 1.if condition then [statement] elseif condition then [statement] else [statement ...
- MySQL 之视图、 触发器、事务、存储过程、内置函数、流程控制、索引
本文内容: 视图 触发器 事务 存储过程 内置函数 流程控制 索引 ------------------------------------------------------------------ ...
- MySQL之视图、触发器、事务、存储、函数、流程控制
一.视图 视图就是一个虚拟表,我们把复杂的sql语句后看到的虚拟表封装起来,给他取个名字,当我们下次使用的时候,就不用再去写复杂的sql语句,直接调用封装后的视图名字,就可以得到我们想要的表,然后就可 ...
- MySQL之视图、触发器、事务、存储过程、函数 流程控制
MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...
- MySQL数据库(六)-- SQL注入攻击、视图、事物、存储过程、流程控制
一.SQL注入攻击 1.什么是SQL注入攻击 一些了解sql语法的用户,可以输入一些关键字 或合法sql,来导致原始的sql逻辑发生变化,从而跳过登录验证 或者 删除数据库 import pymysq ...
- MySQL视图、触发器、事务、存储过程、内置函数、流程控制、索引
一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view tea ...
随机推荐
- [吐槽]困扰了1周的API调用失败问题的原因是使用了加密DNS
参考API的官方文档使用postman测试了一下,导入了百度提供的postman环境配置文件,粘贴提供的预处理代码后直接发起请求,响应里提示 "signature is empty" ...
- rust程序设计(4)关于 trait | impl 相关的概念和疑问
trait是什么? Rust中的trait是一种定义可被多种类型实现的共享行为的方式.它类似于Java或C#中的接口.通过trait,你可以定义一组方法签名(有时包括默认实现),不同的类型可以实现这些 ...
- spring mvc统一处理接口返回值,aop切面实现,将请求的入参和出参存储在数据库中,切面内重新抛出异常
spring mvc统一处理接口返回值,aop切面实现,将请求的入参和出参存储在数据库中 aop类实现Aspect的多个方法注解中,只有Around注解的方法是有返回值的,可以对方法的入参和返回值均进 ...
- 关于Elasticsearch查找相关的问题汇总(match、match_phrase、query_string和term)
关于Elasticsearch查找相关的问题汇总(match.match_phrase.query_string和term) 查询全部: { "query": { "ma ...
- 部署jar项目服务命令
部署jar项目服务命令首先使用jenkins打包jar history | grep java 查看ps aux | grep 服务关键字关闭进程,否则启动的时候报错:java.net.BindExc ...
- springboot支持http2
现在http/3都出来了,但是很多项目还是没有采用https,这个是说不过去的. http3在2022/06/06 正式发布,具体见https://www.163.com/dy/article/H9B ...
- Android 7 修改启动动画和开机声音
背景 在修改开机音量的时候,发现找不到对应的声音功能调用. 因此了解了一下安卓的开机声音是如何实现的. 安卓4~安卓7 都可以这么做. 参考: https://blog.csdn.net/chen82 ...
- 【仿真】Carla简易安装 Window Ubuntu均适用 附ROS的简单连接 [0]
参考与前言 CARLA Documentation 官方文档 后续链接:[仿真]Carla介绍与使用 [1] 本篇创建于 2020/12/18,安装方式为压缩包安装,无需UE4等软件,但是前提是需要一 ...
- 结合RNN与Transformer双重优点,深度解析大语言模型RWKV
本文分享自华为云社区<[云驻共创]昇思MindSpore技术公开课 RWKV 模型架构深度解析>,作者:Freedom123. 一.前言 Transformer模型作为一种革命性的神经网络 ...
- MyBatis学习篇
什么是MyBatis (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement等繁杂 ...