小白终是踏上了这条不归路----小文的mysql学习笔记(23)---------流程控制结构
小白终是踏上了这条不归路----小文的mysql学习笔记(23)---------流程控制结构
**
小白终是踏上了这条不归路----小文的mysql学习笔记(1)
小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询
小白终是踏上了这条不归路----小文的mysql学习笔记(3)----排序询查
小白终是踏上了这条不归路----小文的mysql学习笔记(4)----常见的基本函数
小白终是踏上了这条不归路----小文的mysql学习笔记(5)----分组查询 … **
流程控制结构主要一共有三种:
顺序结构: 程序从上往下依次执行 循环结构: 程序在满足一定条件的基础上,重复执行一段代码
一、分支结构
1、if函数
语法: IF(表达式1,表达式2,表达式3);
ps:一般和其他的语句如 select、等一起使用
解释: 如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值
作用: 可以实现简单的双分支。
当然下面我们举一个简单的例子,只是演示一下if函数,
举例: 当然这里2>3 显然是不正确的,所以输出表达式3‘错误’。
2、case结构
特点: 2、它也可以作为独立的语句去使用,但只能放在BEGIN END中。 4、ELSE可以省略,如果ELSE省略了,并且所有WHEN条件都不满足,则返回NULL
case结构一共有两种情况 ,下面我们来分别说一说
(1)case 函数的使用一: switch case 的效果类似于java中的switch语句,一般用于实现等值判断。
语法: case 要判断的字段或表达式 When 常量2 then 要显示的值2或语句; else 要显示的值n或语句;
end case;
(2)、case函数的使用二: 类似于多重if。一般用于实现区间判断
语法:case When 条件2 then 要显示的值2或语句2; else 要显示的值n或语句n;
end case;
那么下面我们简单的举一个例子
例: 创建存储过程,根据传入的工资,来返回等级, 如果工资>10000,显示为c级别;否则显示为D级别 那么我们来调用一下:我们输入工资12500。 明显返回了等级为C级。
3、if结构
语法: if 条件1 then 语句1; … … end if
那么下面我们来举一个简单的 例子:
二、循环结构
一共有三种: while 、loop 、repeat
流程控制:
iterate 类似于continue, 继续,结束本次循环,继续下一次。
leave 类似于 break,跳出,结束当前所在的循环。
注意: 别名;当我们要添加流程控制语句时必须,先给我们的循环取别名;如果不加循环控制语句,那么可以不用取别名
1、while
ps:先判断后执行。
语法: 循环体;
end while 【别名】;
那么下面我们来分别举一下例子:
(1)没有添加循环控制语句
(2)添加流程控制leave语句
案例: 批量插入,根据输入的次数插入数据到admin表,但是一旦条数>15,则立刻终止 调用:我们试着输入20次,但是大于了十五直接终止,所以只会插入15条数据 (3)添加流程控制iterate语句
2、loop
ps:它没有内置的循环条件,但是可以通过添加leave语句来跳出循环
语法: 循环体;
end loop 【别名】;
ps:一般用来模拟死循环
3、repeat
ps:先执行,后判断。
语法: 循环体; end repeat 【别名】;
那么我们简单的做个例子:同样是根据输入次数,批量插入表中多条数据
DELIMITER $
CREATE PROCEDURE a1(IN insertcount INT)
BEGIN
DECLARE i INT DEFAULT 0;
REPEAT
INSERT INTO admin(username,`password`) VALUES(CONCAT('小文+',i),'6666');
SET i=i+1;
UNTIL i>=insertcount
END REPEAT;
END $
我们来调用:插入五条,然后我们来查询数据,你会发现有一个区别:如果你上面设置变量和之前的while循环一样设置为1的话就会少插入一次,所以我们起初设置变量i初始值要设为0.才能达到和while一样的效果。
补充:
rand() 函数
含义: 返回一个随机的浮点值;即随即返回一个0到1之间的数,不包括临界值
简单的做一个例子来理解它
那么下面我们简单的做一个有关循环控制的案例:
创建一个存储过程,实现向该表插入指定个数的随机长度的有序字符串
然后下面在该表中创建存储过程
DELIMITER $
CREATE PROCEDURE tx(IN insertcount INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE str VARCHAR(30) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
DECLARE start_a INT DEFAULT 1;
DECLARE end_a INT DEFAULT 1;
WHILE i<=insertcount DO
SET start_a=FLOOR(RAND()*26+1);
SET end_a=FLOOR(RAND()*(27-start_a)+1);
INSERT INTO ac(shzu) VALUES(SUBSTRING(str,start_a,end_a));
SET i=i+1;
END WHILE;
END $
那我们简单的调用,输入数字5 并且查询ac表,你会发现这,的确是随机插入的五条有序的随机字符串
--------别慌,月亮也在大海某处迷茫。