[终章]进阶20-流程控制结构--if/case/while结构 - 三个while的存储过程案例(批量生成表单数据) - 随机长度的随机字符串的存储过程案例
1. mysql 存储过程中尽量使用 @变量 而不用局部变量, @变量不容易报错!权限小,更改一下就报错!
2. sql中判断相等'=' ,用'=' 不用'=='.
3.
#流程控制结构
/*
顺序结构: 程序从上往下依次执行;
分支结构: 程序从多条路径中选择一条往下执行
循环结构: 程序在满足一定条件的基础上,重复执行一段代码 */ #一: 分支结构 #if 函数 : 实现简单的双分支
/*语法: 实现简单的双分支
if(表达式1,表达式2,表达式3)
执行顺序:
如果表达式1成立, 则if函数返回表达式2的值, 否则返回表达式3的值
*/ #2.case 结构
/*
情况1: 类似于java中的switch 语句,一般用于实现等值判断; 语法: case 变量/表达式/字段
when 要判断的值1 then 返回的值1
when 要判断的值2 then 返回的值2
when 要判断的值3 then 返回的值3
....
else 要返回的值n
end 情况2: 类似于java中的多重IF 语句,一般用于实现区间的判断 语法:
case
when 要判断的条件1 then 返回的值1或者语句1;
when 要判断的条件2 then 返回的值2或者语句2;
...
else 要返回的值n或语句n; #可以省略else
end case; 特点:
1)可以作为表达式,嵌套在其他语句中使用,可以放在任何地方, begin end 中,或 begin end 的外面
2)可以作为独立的语句去使用,只能放在begin end中
3)如果when中的某一项值满足条件或者条件成立,则执行对应的then后面的语句,并且结束case
如果都不满足,则执行else 语句
4)else可以省略,
*/ #案例: #创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩: 90-100,显示A; 80-90,显示B;60-80显示C;否则显示D;
DELIMITER $
CREATE PROCEDURE test_case(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 test_case(95) $ #A
CALL test_case(55) $ #D #3:if 结构, 实现多重分支
/*
语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2;
...
[else 语句n;]
end if;
应用场合: 只能在begin /end 中
*/ #案例1:根据传入的成绩,来显示等级,比如传入的成绩: 90-100,返回A; 80-90,返回B;60-80返回C;否则返回D;
DELIMITER $
CREATE FUNCTION test_if(score INT) RETURNS NVARCHAR(10)
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 test_if(66) $ #C #二: 循环结构
/*
分类: while/loop/repeat 循环控制:
结束本次循环进行下一次: iterate 类似于continue
结束当前所在的循环结构 : leave 类似于break
IF 条件 THEN LEAVE 标签名;
END IF;
*/ #1.while ****重点
/*语法:
[标签(名字):]while 循环条件 do
循环体;
end while[标签名];
*/ #2.loop
/*
语法:
[标签:]loop
循环体;
end loop[标签];
#需要搭配leave跳出死循环!
#常用来表示模拟单纯的死循环
*/ #3.repeat
/*
语法:
[标签名:]repeat
循环体;
util 结束循环的条件;
end repeat [标签];
*/ #案例1(简单while循环): 批量插入,根据次数插入到admin 表中的多条记录
DELIMITER $
CREATE PROCEDURE 批量插入1(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
wa: WHILE i<=insertCount DO
INSERT INTO admin(username,`password`) VALUES('Rose'+i,'');
SET i=i+1;
END WHILE wa; END $ CALL 批量插入1(100) $ #案例2(LEAVE(break循环的)+while循环): 批量插入,根据次数插入到admin 表中的多条记录,; 如果次数大于20,则停止插入数据
TRUNCATE TABLE admin;
DELIMITER $
CREATE PROCEDURE 批量插入2(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
wa: WHILE i<=insertCount DO
INSERT INTO admin(username,`password`) VALUES(164215000+i,'');
IF i>=20 THEN LEAVE wa;
END IF;
SET i=i+1;
END WHILE wa; END $ CALL 批量插入2(100) $ #案例3(iterate(continue)+while循环): 批量插入,根据次数插入到admin 表中的多条记录; 仅仅偶数学号插入.
TRUNCATE TABLE admin; DELIMITER $
CREATE PROCEDURE 批量插入5(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 0;
wa: WHILE i<=insertCount DO
SET i=i+1;
IF i%2=1 THEN ITERATE wa;
END IF;
INSERT INTO admin(username,`password`) VALUES(164215000+i,'');
END WHILE wa; END $ CALL 批量插入5(60) $ ###############################################
/*案例一:已知表StringContent ,向该表插入指定的个数的随机长度的随机字符串[1,20]
****随机模式-先随机长度,然后再从字母表中取出一个字符加进已有的字符串
其中字段:
id 自增长, content varchar(20)
*/ CREATE TABLE StringContent(
id INT PRIMARY KEY AUTO_INCREMENT ,
content VARCHAR(20)
); DELIMITER $
CREATE PROCEDURE test_randstr_insert4(IN nums INT)
BEGIN
#select concat('共插入',nums,'条数据');
SET @i = 0;
SET @table_str ='abcdefghijklmnopqrstuvwxyz'; a:WHILE @i<nums DO
SET @i=@i+1;
SET @s2str = '';
SET @len = CEILING(RAND()*15); #代表字符长度 ,共需要循环随机产生len次数据
SET @j = 0;
b:WHILE @j<@len+1 DO
SET @j=@j+1;
SET @s2str = CONCAT(@s2str ,SUBSTR(@table_str,CEILING(RAND()*26),1) );
END WHILE b;
INSERT INTO `stringcontent`(id,content) VALUES(@i,@s2str);
END WHILE a;
END $ CALL test_randstr_insert4(FLOOR(RAND()*100)+1) $ SELECT RAND(); #0.41551091188146816
SELECT FLOOR(RAND()*100); #FLOOR 函数返回小于或等于所给数字表达式的最大整数, 获取[0,99]之间的数值
SELECT CEILING(RAND() * 100); #CEILING 函数返回大于或等于所给数字表达式的最小整数, 获取[1,100]之间的数值
SELECT ROUND(RAND() *100); #四舍五入 ,获取[0,100]之间的数值, 可以出现: 0和100 SELECT ('a'+'b');
[终章]进阶20-流程控制结构--if/case/while结构 - 三个while的存储过程案例(批量生成表单数据) - 随机长度的随机字符串的存储过程案例的更多相关文章
- (八)MySQL事务、视图、变量、存储过程、函数、流程控制结构
补充:增删查改语句在数据库中基本通用,但这篇博客的内容基本是MySQL区别于其它数据库管理系统的知识,也要认真学习. 一.事务 1.含义:在MySQL中,可以通过创建事务来解决一些问题. 2.语法: ...
- Mysql基础(十一):流程控制结构、分支结构、循环结构
流程控制结构 说明:顺序结构:程序从上往下依次执行分支结构:程序按条件进行选择执行,从两条或多条路径中选择一条执行循环结构:程序满足一定条件下,重复执行一组语句 分支结构 特点:1.if函数功能:实现 ...
- MySQL 进阶4 SQL常见函数: 字符函数/数学函数/日期函数/流程控制函数(if/case)
# 进阶4 SQL常见函数 分类: 1/单行函数: 字符函数: concat(),length(),ifnull(__,default) ,instr(), trim(),upper(),lower( ...
- BugPhobia终章篇章:学霸在线系统Beta阶段展示
0x00 :序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet y ...
- [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程
[.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程 本节导读:本节主要介绍什么是.NET反射特性,.NET反射能为我们做些什么,最后介绍几种常用的 ...
- Go基础系列:流程控制结构
条件判断结构:if else 分支选择结构:switch case 循环结构:for break:退出for或switch结构(以及select) continue:进入下一次for迭代 虽然Go是类 ...
- 史上最简单的 SpringCloud 教程 | 终章
https://blog.csdn.net/forezp/article/details/70148833转载请标明出处:http://blog.csdn.net/forezp/article/det ...
- [uboot] (第四章)uboot流程——uboot编译流程
http://blog.csdn.net/ooonebook/article/details/53000893 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...
- 前端开发工程师 - 02.JavaScript程序设计 - 第2章.进阶篇
第2章--进阶篇 类型进阶 类型: Undefined Null Boolean String Number Object 原始类型(值类型):undefined, null, true, " ...
随机推荐
- .net core 使用SignalR实现实时通信
这几天在研究SignalR,网上大部分的例子都是聊天室,我的需求是把服务端的信息发送给前端展示.并且需要实现单个用户推送. 用户登录我用的是ClaimsIdentity,这里就不多解释,如果不是很了解 ...
- python 爬虫实例(一)
一个简单的爬虫工程 环境: OS:Window10 python:3.7 安装一些库文件 pip install requests pip install beautifulsoup4 pip ins ...
- 感受typescript定义变量和数据类型的神奇魔力
变量和数据类型 你的Javascript能力到达瓶颈?那是因为你还不会typescript.掌握TS,让你的开发更加准确简洁. 今天的学习中,我们接着从TS的数据类型和变量入手,感受它们的奇妙魔力. ...
- UN Report: Last 10 Years Likely the Hottest Decade on Record——VOA慢速英语
听力地址:UN Report: Last 10 Years Likely the Hottest Decade on Record 中英对照:联合国报告称过去十年可能是有记录以来最热的十年 Words ...
- why use reverse proxy in asp.net core
开篇论点 Asp.net Core自带了Kestrel, 为什么我们还要使用诸如IIS.Apache或者Nginx来做反向代理呢? 原因分析 Kestrel用来承载Asp.net Core的动态内容是 ...
- 使用babel es6 转 es5
安装 //Webpack 接入 Babel 必须依赖的模块 npm i -D babel-core babel-loader //preset,告诉babel编译的文件中用到了哪些语法env包含当前所 ...
- 立体像对空间前方交会-共线方程求解法(python实现)
一.原理 二.步骤 a.用各自像片的角元素计算出左右像片的旋转矩阵R1和R2. b.有同名像点列出共线方程. c.将方程写为未知数的线性方程形式,计算线性系数. d.写出误差方程,系数矩阵与常数项. ...
- 洛谷 P1217 回文质数
洛谷 P1217 回文质数 链接 https://www.luogu.org/problem/P1217 题目 题目描述 因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 ...
- C#用户控件实战01_CSS布局
很多应用系统的主页布局,一般采用如下案例所示布局较多,如下图的CSS布局框架,上.中.下,接下来我们演示,在C#中实现如下的业务架构布局. 代码范例: 在<body></body&g ...
- JVM锁优化以及区别
偏向所锁,轻量级锁都是乐观锁,重量级锁是悲观锁. 首先简单说下先偏向锁.轻量级锁.重量级锁三者各自的应用场景: 偏向锁:只有一个线程进入临界区: 轻量级锁:多个线程交替进入临界区: 重量级锁:多个线程 ...