1. 1. mysql 存储过程中尽量使用 @变量 而不用局部变量, @变量不容易报错!权限小,更改一下就报错!
  2. 2. sql中判断相等'=' ,用'=' 不用'=='.
  3. 3.
  1. #流程控制结构
  2. /*
  3. 顺序结构: 程序从上往下依次执行;
  4. 分支结构: 程序从多条路径中选择一条往下执行
  5. 循环结构: 程序在满足一定条件的基础上,重复执行一段代码
  6.  
  7. */
  8.  
  9. #一: 分支结构
  10.  
  11. #if 函数 : 实现简单的双分支
  12. /*语法: 实现简单的双分支
  13. if(表达式1,表达式2,表达式3)
  14. 执行顺序:
  15. 如果表达式1成立, 则if函数返回表达式2的值, 否则返回表达式3的值
  16. */
  17.  
  18. #2.case 结构
  19. /*
  20. 情况1: 类似于java中的switch 语句,一般用于实现等值判断;
  21.  
  22. 语法: case 变量/表达式/字段
  23. when 要判断的值1 then 返回的值1
  24. when 要判断的值2 then 返回的值2
  25. when 要判断的值3 then 返回的值3
  26. ....
  27. else 要返回的值n
  28. end
  29.  
  30. 情况2: 类似于java中的多重IF 语句,一般用于实现区间的判断
  31.  
  32. 语法:
  33. case
  34. when 要判断的条件1 then 返回的值1或者语句1;
  35. when 要判断的条件2 then 返回的值2或者语句2;
  36. ...
  37. else 要返回的值n或语句n; #可以省略else
  38. end case;
  39.  
  40. 特点:
  41. 1)可以作为表达式,嵌套在其他语句中使用,可以放在任何地方, begin end 中,或 begin end 的外面
  42. 2)可以作为独立的语句去使用,只能放在begin end中
  43. 3)如果when中的某一项值满足条件或者条件成立,则执行对应的then后面的语句,并且结束case
  44. 如果都不满足,则执行else 语句
  45. 4)else可以省略,
  46. */
  47.  
  48. #案例:
  49.  
  50. #创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩: 90-100,显示A; 80-90,显示B;60-80显示C;否则显示D;
  51. DELIMITER $
  52. CREATE PROCEDURE test_case(IN score INT)
  53. BEGIN
  54. CASE
  55. WHEN score>=90 AND score <=100 THEN SELECT 'A';
  56. WHEN score>=80 THEN SELECT 'B';
  57. WHEN score>=60 THEN SELECT 'C';
  58. ELSE SELECT 'D';
  59. END CASE;
  60. END $
  61.  
  62. CALL test_case(95) $ #A
  63. CALL test_case(55) $ #D
  64.  
  65. #3:if 结构, 实现多重分支
  66. /*
  67. 语法:
  68. if 条件1 then 语句1;
  69. elseif 条件2 then 语句2;
  70. ...
  71. [else 语句n;]
  72. end if;
  73. 应用场合: 只能在begin /end 中
  74. */
  75.  
  76. #案例1:根据传入的成绩,来显示等级,比如传入的成绩: 90-100,返回A; 80-90,返回B;60-80返回C;否则返回D;
  77. DELIMITER $
  78. CREATE FUNCTION test_if(score INT) RETURNS NVARCHAR(10)
  79. BEGIN
  80. IF score>=90 AND score<=100 THEN RETURN 'A';
  81. ELSEIF score>=80 THEN RETURN 'B';
  82. ELSEIF score>=60 THEN RETURN 'C';
  83. ELSE RETURN 'D';
  84. END IF;
  85. END $
  86.  
  87. SELECT test_if(66) $ #C
  88.  
  89. #二: 循环结构
  90. /*
  91. 分类: while/loop/repeat
  92.  
  93. 循环控制:
  94. 结束本次循环进行下一次: iterate 类似于continue
  95. 结束当前所在的循环结构 : leave 类似于break
  96. IF 条件 THEN LEAVE 标签名;
  97. END IF;
  98. */
  99.  
  100. #1.while ****重点
  101. /*语法:
  102. [标签(名字):]while 循环条件 do
  103. 循环体;
  104. end while[标签名];
  105. */
  106.  
  107. #2.loop
  108. /*
  109. 语法:
  110. [标签:]loop
  111. 循环体;
  112. end loop[标签];
  113. #需要搭配leave跳出死循环!
  114. #常用来表示模拟单纯的死循环
  115. */
  116.  
  117. #3.repeat
  118. /*
  119. 语法:
  120. [标签名:]repeat
  121. 循环体;
  122. util 结束循环的条件;
  123. end repeat [标签];
  124. */
  125.  
  126. #案例1(简单while循环): 批量插入,根据次数插入到admin 表中的多条记录
  127. DELIMITER $
  128. CREATE PROCEDURE 批量插入1(IN insertCount INT)
  129. BEGIN
  130. DECLARE i INT DEFAULT 1;
  131. wa: WHILE i<=insertCount DO
  132. INSERT INTO admin(username,`password`) VALUES('Rose'+i,'');
  133. SET i=i+1;
  134. END WHILE wa;
  135.  
  136. END $
  137.  
  138. CALL 批量插入1(100) $
  139.  
  140. #案例2(LEAVE(break循环的)+while循环): 批量插入,根据次数插入到admin 表中的多条记录,; 如果次数大于20,则停止插入数据
  141. TRUNCATE TABLE admin;
  142. DELIMITER $
  143. CREATE PROCEDURE 批量插入2(IN insertCount INT)
  144. BEGIN
  145. DECLARE i INT DEFAULT 1;
  146. wa: WHILE i<=insertCount DO
  147. INSERT INTO admin(username,`password`) VALUES(164215000+i,'');
  148. IF i>=20 THEN LEAVE wa;
  149. END IF;
  150. SET i=i+1;
  151. END WHILE wa;
  152.  
  153. END $
  154.  
  155. CALL 批量插入2(100) $
  156.  
  157. #案例3(iterate(continue)+while循环): 批量插入,根据次数插入到admin 表中的多条记录; 仅仅偶数学号插入.
  158. TRUNCATE TABLE admin;
  159.  
  160. DELIMITER $
  161. CREATE PROCEDURE 批量插入5(IN insertCount INT)
  162. BEGIN
  163. DECLARE i INT DEFAULT 0;
  164. wa: WHILE i<=insertCount DO
  165. SET i=i+1;
  166. IF i%2=1 THEN ITERATE wa;
  167. END IF;
  168. INSERT INTO admin(username,`password`) VALUES(164215000+i,'');
  169. END WHILE wa;
  170.  
  171. END $
  172.  
  173. CALL 批量插入5(60) $
  174.  
  175. ###############################################
  176. /*案例一:已知表StringContent ,向该表插入指定的个数的随机长度的随机字符串[1,20]
  177. ****随机模式-先随机长度,然后再从字母表中取出一个字符加进已有的字符串
  178. 其中字段:
  179. id 自增长, content varchar(20)
  180. */
  181.  
  182. CREATE TABLE StringContent(
  183. id INT PRIMARY KEY AUTO_INCREMENT ,
  184. content VARCHAR(20)
  185. );
  186.  
  187. DELIMITER $
  188. CREATE PROCEDURE test_randstr_insert4(IN nums INT)
  189. BEGIN
  190. #select concat('共插入',nums,'条数据');
  191. SET @i = 0;
  192. SET @table_str ='abcdefghijklmnopqrstuvwxyz';
  193.  
  194. a:WHILE @i<nums DO
  195. SET @i=@i+1;
  196. SET @s2str = '';
  197. SET @len = CEILING(RAND()*15); #代表字符长度 ,共需要循环随机产生len次数据
  198. SET @j = 0;
  199. b:WHILE @j<@len+1 DO
  200. SET @j=@j+1;
  201. SET @s2str = CONCAT(@s2str ,SUBSTR(@table_str,CEILING(RAND()*26),1) );
  202. END WHILE b;
  203. INSERT INTO `stringcontent`(id,content) VALUES(@i,@s2str);
  204. END WHILE a;
  205. END $
  206.  
  207. CALL test_randstr_insert4(FLOOR(RAND()*100)+1) $
  208.  
  209. SELECT RAND(); #0.41551091188146816
  210. SELECT FLOOR(RAND()*100); #FLOOR 函数返回小于或等于所给数字表达式的最大整数, 获取[0,99]之间的数值
  211. SELECT CEILING(RAND() * 100); #CEILING 函数返回大于或等于所给数字表达式的最小整数, 获取[1,100]之间的数值
  212. SELECT ROUND(RAND() *100); #四舍五入 ,获取[0,100]之间的数值, 可以出现: 0和100
  213.  
  214. SELECT ('a'+'b');

[终章]进阶20-流程控制结构--if/case/while结构 - 三个while的存储过程案例(批量生成表单数据) - 随机长度的随机字符串的存储过程案例的更多相关文章

  1. (八)MySQL事务、视图、变量、存储过程、函数、流程控制结构

    补充:增删查改语句在数据库中基本通用,但这篇博客的内容基本是MySQL区别于其它数据库管理系统的知识,也要认真学习. 一.事务 1.含义:在MySQL中,可以通过创建事务来解决一些问题. 2.语法: ...

  2. Mysql基础(十一):流程控制结构、分支结构、循环结构

    流程控制结构 说明:顺序结构:程序从上往下依次执行分支结构:程序按条件进行选择执行,从两条或多条路径中选择一条执行循环结构:程序满足一定条件下,重复执行一组语句 分支结构 特点:1.if函数功能:实现 ...

  3. MySQL 进阶4 SQL常见函数: 字符函数/数学函数/日期函数/流程控制函数(if/case)

    # 进阶4 SQL常见函数 分类: 1/单行函数: 字符函数: concat(),length(),ifnull(__,default) ,instr(), trim(),upper(),lower( ...

  4. BugPhobia终章篇章:学霸在线系统Beta阶段展示

    0x00 :序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet y ...

  5. [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程

    [.net 面向对象程序设计进阶] (20) 反射(Reflection)(上)利用反射技术实现动态编程 本节导读:本节主要介绍什么是.NET反射特性,.NET反射能为我们做些什么,最后介绍几种常用的 ...

  6. Go基础系列:流程控制结构

    条件判断结构:if else 分支选择结构:switch case 循环结构:for break:退出for或switch结构(以及select) continue:进入下一次for迭代 虽然Go是类 ...

  7. 史上最简单的 SpringCloud 教程 | 终章

    https://blog.csdn.net/forezp/article/details/70148833转载请标明出处:http://blog.csdn.net/forezp/article/det ...

  8. [uboot] (第四章)uboot流程——uboot编译流程

    http://blog.csdn.net/ooonebook/article/details/53000893 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...

  9. 前端开发工程师 - 02.JavaScript程序设计 - 第2章.进阶篇

    第2章--进阶篇 类型进阶 类型: Undefined Null Boolean String Number Object 原始类型(值类型):undefined, null, true, " ...

随机推荐

  1. popup demo

    Django下实现: urls.py: from django.conf.urls import url from django.contrib import admin from app01 imp ...

  2. eclipse的maven中需要把jar的包文件登入到自己的仓库里面的操作

    问题的描述 从别人那拿到了Java maven的工程,导入自己的eclipse中之后编译的时候出现包文件找不到,之后把工程进行maven的update project之后,pom.xml文件出现错误, ...

  3. jenkins publish .net core application to linux server

    最近学习Docker与Jenkins, 网上大部分都是关于Jenkins+Git+Docker进行持续远程部署, 我一直在考虑为什么Jenkins和Docker要绑定一块使用, 因为我想单独使用Jen ...

  4. mac install azure-cli

    安装 CLI 时,可以先更新 brew 存储库信息,然后运行 install 命令: brew update && brew install azure-cli 更新: brew up ...

  5. [转帖]新iPhone的黑科技:UWB技术揭秘

    新iPhone的黑科技:UWB技术揭秘 http://blog.nsfocus.net/iphone-black-technology-uwb-technology-revealed/    阅读:  ...

  6. vim常用命令的使用

    中文博客:https://www.cnblogs.com/lijia0511/p/5644566.html 英文原文:http://yannesposito.com/Scratch/en/blog/L ...

  7. nmap使用帮助翻译

    Nmap 7.60 ( https://nmap.org )Usage: nmap [扫描类型] [操作] {目标说明}目标说明:  可以识别主机名.IP地址.网络,等等.  例如: scanme.n ...

  8. ubuntu 安装 Java 开发环境

    可以使用命令 -jre-headless 或者使用:   本文链接:https://blog.csdn.net/sangewuxie/article/details/80958611 本人的ubunt ...

  9. jquery.marquee

    http://aamirafridi.com/jquery/jquery-marquee-plugin#examples <script src="/plugins/marquee/j ...

  10. Matlab匿名函数,子函数,私有函数,重载函数,eval和feval函数

    匿名函数,子函数,私有函数等函数类型 匿名函数: 匿名函数没有函数名,也不是.m文件,只包含一个表达式和输入输出参数. Fxy=@(x,y)x.^y+3*x*y x,y为输入输入参数,Fxy为函数名 ...