分支
一、if函数
语法:if(条件,值1,值2)
特点:可以用在任何位置
二、case语句
语法:
情况一:类似于switch
case 表达式
when 值1 then 结果1或语句1(如果是语句,需要加分号)
when 值2 then 结果2或语句2(如果是语句,需要加分号)
...
else 结果n或语句n(如果是语句,需要加分号)
end 【case】(如果是放在begin end中需要加上case,如果放在select后面不需要)
情况二:类似于多重if
case
when 条件1 then 结果1或语句1(如果是语句,需要加分号)
when 条件2 then 结果2或语句2(如果是语句,需要加分号)
...
else 结果n或语句n(如果是语句,需要加分号)
end 【case】(如果是放在begin end中需要加上case,如果放在select后面不需要)
特点:
可以用在任何位置
三、if elseif语句
语法:
if 情况1 then 语句1;
elseif 情况2 then 语句2;
...
else 语句n;
end if;
特点:
只能用在begin end中!!!!!!!!!!!!!!!
三者比较:
应用场合:
if函数 简单双分支
case结构 等值判断 的多分支
if结构 区间判断 的多分支
循环
循环控制:
ITERATE类似于CONTINUE,继续,结束本次循环,继续下一次
LEAVE 类似于BREAK,跳出,结束当前所在循环
语法:
【标签:】WHILE 循环条件 DO
循环体
END WHILE 【标签】;
特点:
只能放在BEGIN END里面
如果要搭配leave跳转语句,需要使用标签,否则可以不用标签
leave类似于java中的break语句,跳出所在循环!!!
Eg.
#1.WHILE
/*
语法:
【标签:】WHILE 循环条件 DO
循环体
END WHILE【标签】;
*/
#2.LOOP
/*
语法:
【标签:】LOOP
循环体
END LOOP【标签】;
可以用来模拟简单的死循环
*/
#3.REPEAT
/*
语法:
【标签:】REPEAT
循环体;
UNTIL 结束循环的条件
END REPAIR 【标签】;
*/
#1.没有添加循环控制语句
#案例:批量插入,根据次数插入到admin表中多条记录
CREATE PROCEDURE pro_while1(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<=insetCount DO
INSERT INTO admin(username,`password`) VALUES('Rose' + i, '666');
SET i=i+1;
END WHILE;
END $
CALL pro_while1(100)$
#2.添加LEAVE语句
#案例:批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止
TRUNCATE TABLE admin$
DROP PROCEDURE test_while1$
CREATE PROCEDURE test_while1(IN insetCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
a:WHILE i<=insetCount DO
INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i), '1000');
IF i>=20 THEN LEAVE a;
END IF;
SET i=i+1;
END WHILE;
END $
CALL test_while1(100)$
#3.添加iterate语句
#案例:批量插入,根据次数插入到admin表中多条记录,只插入偶数次
TRUNCATE TABLE admin$
DROP PROCEDURE test_while1$
CREATE PROCEDURE test_while1(IN insetCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
a:WHILE i<=insetCount DO
SET i=i+1;
IF MOD(i,2) != 0 THEN ITERATE a;
END IF;
INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i), '1000');
END WHILE;
END $
CALL test_while1(100)$
案例:
/*
已知表stringcontent
其中字段:
id 自增长
content varchar(20)
向表中插入指定个数的随机字符串
*/
DROP TABLE IF EXISTS stringcontent;
CREATE TABLE stringconten(
id INT PRIMARY KEY auto_increment;
content VARCHAR(20)
);
DELIMITER $
CREATE PROCEDURE test_randstr_insert(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;#定义一个循环变量i,表示插入次数
DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
DECLARE startIndex INT DEFAULT 1;#代表起始索引
DECLARE len INT DEFAULT 1;#代表截取的字符长度
WHILE i<=insertCount DO
SET len = FLOOR(RAND()*(20-startIndex+1)+1);#产生一个随机整数,代表截取长度
SET startIndex = FLOOR(RAND()*26+1);#产生一个随机整数,代表起始索引1-26
INSERT INTO stringcontent(content) VALUES(SUBSTR(str,startIndex,len));
SET i=i+1;#循环变量更新
END WHILE;
END $