【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 ...
随机推荐
- Azkaban快速入门
先说一些废话 因为之前自己工作中有用过Azkaban作为自动化任务调度工具,所以想参考自己之前的使用经验,总结一下关于Azkaban的使用,方便大家使用Azkaban快速实现企业级自动化任务 如何选择 ...
- 新手入门html 表格 表单 超链接 图片
超链接标签 <a></a> A里面的html属性 href="所要跳转到的目标连接" <a href="http:是必须加的"&g ...
- css圆圈慢慢放大
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- v-for 伪标签:template:
根据一组数组或对象的选项列表进行渲染. v-for指令需要使用 (item,index) in 数组或对象 形式的特殊语法,同时还需要指定key值,key的作用在vue进行新旧数据比对渲染页面里,如果 ...
- php监控
1.开启php的监控数据监控功能 # 使用部署了php-fpm的机器即可 # yum install php-fpm -y # 1.修改参数 [root@web-7 /etc/php-fpm.d]#g ...
- Base64编码和解码字符串
Base64编码和解码字符串 package com.example.core.mydemo.cpic; import org.apache.commons.codec.binary.Base64; ...
- C#/.NET/.NET Core拾遗补漏合集(24年6月更新)
前言 在这个快速发展的技术世界中,时常会有一些重要的知识点.信息或细节被忽略或遗漏.<C#/.NET/.NET Core拾遗补漏>专栏我们将探讨一些可能被忽略或遗漏的重要知识点.信息或细节 ...
- C# DateTime日期字段转中文文字
public static String ToChineseYearAndMonth(this DateTime dt) { string[] chineseNumbers = { "零&q ...
- 使用vue-contextmenujs鼠标右键菜单时,当高度不够时显示不全的问题
之前是采用npm或者yarn直接装包vue-contextmenujs的形式: npm install vue-contextmenujs -S || yarn add vue-contextmenu ...
- 解决Vue中使用history路由模式出现404的问题
背景 vue中默认的路由模式是hash,会出现烦人的符号#,如http://127.0.0.1/#/. 改为history模式可以解决这个问题,但是有一个坑是:强刷新.回退等操作会出现404. Vue ...