[终章]进阶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, " ...
随机推荐
- popup demo
Django下实现: urls.py: from django.conf.urls import url from django.contrib import admin from app01 imp ...
- eclipse的maven中需要把jar的包文件登入到自己的仓库里面的操作
问题的描述 从别人那拿到了Java maven的工程,导入自己的eclipse中之后编译的时候出现包文件找不到,之后把工程进行maven的update project之后,pom.xml文件出现错误, ...
- jenkins publish .net core application to linux server
最近学习Docker与Jenkins, 网上大部分都是关于Jenkins+Git+Docker进行持续远程部署, 我一直在考虑为什么Jenkins和Docker要绑定一块使用, 因为我想单独使用Jen ...
- mac install azure-cli
安装 CLI 时,可以先更新 brew 存储库信息,然后运行 install 命令: brew update && brew install azure-cli 更新: brew up ...
- [转帖]新iPhone的黑科技:UWB技术揭秘
新iPhone的黑科技:UWB技术揭秘 http://blog.nsfocus.net/iphone-black-technology-uwb-technology-revealed/ 阅读: ...
- vim常用命令的使用
中文博客:https://www.cnblogs.com/lijia0511/p/5644566.html 英文原文:http://yannesposito.com/Scratch/en/blog/L ...
- nmap使用帮助翻译
Nmap 7.60 ( https://nmap.org )Usage: nmap [扫描类型] [操作] {目标说明}目标说明: 可以识别主机名.IP地址.网络,等等. 例如: scanme.n ...
- ubuntu 安装 Java 开发环境
可以使用命令 -jre-headless 或者使用: 本文链接:https://blog.csdn.net/sangewuxie/article/details/80958611 本人的ubunt ...
- jquery.marquee
http://aamirafridi.com/jquery/jquery-marquee-plugin#examples <script src="/plugins/marquee/j ...
- Matlab匿名函数,子函数,私有函数,重载函数,eval和feval函数
匿名函数,子函数,私有函数等函数类型 匿名函数: 匿名函数没有函数名,也不是.m文件,只包含一个表达式和输入输出参数. Fxy=@(x,y)x.^y+3*x*y x,y为输入输入参数,Fxy为函数名 ...