-- MySQL中的三中循环 while 、 loop 、repeat  求  1-n 的和-- 第一种 while 循环
-- 求 1-n 的和
/*  while循环语法:
while 条件 DO循环体;
end while;
*/
-- 实例:
create procedure sum1(a int)
begindeclare sum int default 0;  -- default 是指定该变量的默认值declare i int default 1;
while i<=a DO -- 循环开始set sum=sum+i;set i=i+1;
end while; -- 循环结束
select sum;  -- 输出结果
end
-- 执行存储过程
call sum1(100);
-- 删除存储过程
drop procedure if exists sum1-- 第二种 loop 循环
/*loop 循环语法:
loop_name:loopif 条件 THEN -- 满足条件时离开循环leave loop_name;  -- 和 break 差不多都是结束训话end if;
end loop;
*/-- 实例:
create procedure sum2(a int)
begindeclare sum int default 0;declare i int default 1;loop_name:loop -- 循环开始if i>a then leave loop_name;  -- 判断条件成立则结束循环  好比java中的 boeakend if;set sum=sum+i;set i=i+1;end loop;  -- 循环结束select sum; -- 输出结果
end
-- 执行存储过程
call sum2(100);
-- 删除存储过程
drop procedure if exists  sum2-- 第三种 repeat 循环
/*repeat 循环语法
repeat循环体
until 条件 end repeat;
*/-- 实例;
create procedure sum3(a int)
begindeclare sum int default 0;declare i int default 1;repeat -- 循环开始set sum=sum+i;set i=i+1;until i>a end repeat; -- 循环结束select sum; -- 输出结果
end-- 执行存储过程
call sum3(100);
-- 删除存储过程
drop procedure if exists sum3

存储过程加游标一起使用的基本操作

-- 存储过程  加  游标-- 建表
create table student(
sid varchar(8) primary key,
sname varchar(10),
sex varchar(2),
age int,
classno varchar(6)
);
-- 表中的数据
insert into student values
('20170101','张石瑞','男','19','201701'),
('20170201','李佛','女','20','201702'),
('20170202','王法无','男','19','201702')/* 创建游标和关闭游标的四个步骤
-- 1、创建游标  (cur_name 游标名字)
declare cur_name cursor for select 语句;
-- 2、打开游标
open cur_name;
-- 3、提取游标数据
fetch cur_name [into 变量1,变量2,、、、、、];
-- 4、关闭(释放)游标
close cur_name;
*/
-- 游标的基本提取操作
create PROCEDURE proc1()
BEGIN
declare cur_sid varchar(20);
declare cur_sname varchar(20);
declare cur_sex varchar(20);
declare cur_age varchar(20);
declare cur_classno varchar(20);
-- 1、
declare student_cur1 CURSOR for
select sid,sname,sex,age,classno from student;
-- 2、
open student_cur1;
-- 3、
fetch student_cur1 into cur_sid,cur_sname,cur_sex,cur_age,cur_classno;
select cur_sid,cur_sname,cur_sex,cur_age,cur_classno;
-- 4、
close student_cur1;
END-- 执行存储过程
call proc1();
-- 删除存储过程
drop procedure if exists proc1-- 游标的循环遍历‘
create PROCEDURE proc2()
BEGIN
declare cur_sid varchar(20);
declare cur_sname varchar(20);
declare cur_sex varchar(20);
declare cur_age varchar(20);
declare cur_classno varchar(20);declare sum int default 0;
declare i int default 0;
-- 1、
declare student_cur1 CURSOR for
select sid,sname,sex,age,classno from student;
-- 2、
open student_cur1;
-- 3、 最简单的  while 遍历方法
select count(sid) into sum from student;
while i<sum DOfetch student_cur1 into cur_sid,cur_sname,cur_sex,cur_age,cur_classno;select cur_sid,cur_sname,cur_sex,cur_age,cur_classno;set i=i+1;
end while;
-- 4、
close student_cur1;
END-- 执行存储过程
call proc2();
-- 删除存储过程
drop procedure if exists proc2-- 使用 loop 遍历游标
create PROCEDURE proc3()
BEGIN
declare cur_sid varchar(20);
declare cur_sname varchar(20);
declare cur_sex varchar(20);
declare cur_age varchar(20);
declare cur_classno varchar(20);declare state int default false; -- 定义表示用于判断游标是否溢出
-- 1、
declare student_cur1 CURSOR for
select sid,sname,sex,age,classno from student;
-- 2、
open student_cur1;
-- 3、 loop 遍历游标
cur_loop:loop -- 循环开始
-- 循环开始的时候提取一次fetch student_cur1 into cur_sid,cur_sname,cur_sex,cur_age,cur_classno;select cur_sid,cur_sname,cur_sex,cur_age,cur_classno;if state thenleave cur_loop; end if;
end loop; -- 循环结束
-- 4、
close student_cur1;
END-- 执行存储过程
call proc3()
-- 删除存储过程
drop procedure if exists proc3/*
fetch是获取游标当前指向的数据行,并将指针指向下一行,当游标已经指向最后一行时继续执行会造成游标溢出。
使用loop循环游标时,他本身是不会监控是否到最后一条数据了,像下面代码这种写法,就会造成死循环;read_loop:loop
fetch cur into n,c;
set total = total+c;
end loop;
在MySql中,造成游标溢出时会引发mysql预定义的NOT FOUND错误,所以在上面使用下面的代码指定了当引发not found错误时定义一个continue 的事件,指定这个事件发生时修改done变量的值。declare continue HANDLER for not found set done = true;
也有这样写的
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' set done = true;
所以在循环时加上了下面这句代码:--判断游标的循环是否结束
if done then  leave read_loop;    --跳出游标循环
end if;
如果done的值是true,就结束循环。继续执行下面的代码。*/-- 性别翻转create PROCEDURE proc4()
BEGIN
declare cur_sid int;
declare cur_sex varchar(1);declare state int default false;
-- 1、
declare sex_cur cursor for select sid,sex from student;
--
declare CONTINUE HANDLER for not found set state=true;
-- 2、
open sex_cur;
-- 3、
sex_loop:LOOP -- 循环开始fetch sex_cur into cur_sid,cur_sex;if state thenleave sex_loop;end if;if cur_sex='男' thenupdate student set sex='女' where sid=cur_sid;end if;if cur_sex='女' thenupdate student set sex='男' where sid=cur_sid;end if;
end loop; -- 循环结束
-- 4、
close sex_cur;
END-- 执行存储过程
call proc4()
-- 删除存储过程
drop procedure if exists proc4-- 表的查询
select * from student

http://www.cnblogs.com/Lvhengshuai/category/997161.html

转载于:https://www.cnblogs.com/Luouy/p/7301360.html

MySQL 中的三中循环 while loop repeat 的基本用法相关推荐

  1. mysql 正则替换 换行,MySQL中使用replace、regexp进行正则表达式替换的用法分析

    本文实例讲述了MySQL中使用replace.regexp进行正则表达式替换的用法.,具体如下: 今天一个朋友问我,如果将数据库中查到的类似于"./uploads/110100_cityHo ...

  2. mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法

    mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法:  语法:  TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)  说明:  ...

  3. php event loop,理解javascript中的事件循环(Event Loop)

    背景 在研究js的异步的实现方式的时候,发现了JavaScript 中的 macrotask 和 microtask 的概念.在查阅了一番资料之后,对其中的执行机制有所了解,下面整理出来,希望可以帮助 ...

  4. MySQL中escape(避开,逃避)关键字的用法

    MySQL转义 转义即表示转义字符原来的语义,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义. MySQL中,转义字符以"\" ...

  5. mysql中create使用_mysql怎么创建表之create用法

    mysql的基础,创建一个表,但是高手和菜鸟就会有区别,合适的字段,字段描述,索引等细节很能体现一个程序员的水平,下面介绍用create创建表 在mysql数据库中不管我们是通过导入还是其它的工具创建 ...

  6. mysql中写一个循环语句_mysql 如何写循环语句

    mysql写循环语句的方法:1.使用while循环,代码为[WHILE i<5 DO]:3.使用repeat循环:代码为[REPEAT INSERT INTO test VALUES(i+11, ...

  7. JavaScipt 中的事件循环(event loop),以及微任务 和宏任务的概念

    说事件循环(event loop)之前先要搞清楚几个问题. 1. js为什么是单线程的? 试想一下,如果js不是单线程的,同时有两个方法作用dom,一个删除,一个修改,那么这时候浏览器该听谁的? 2. ...

  8. MySQL中count(1),count(*),count(某字段)等用法联系和区别

    一. 从执行结果来看 count(*):所有行进行统计,包括NULL行count(1):所有行进行统计,包括NULL行count(column):对column中非Null进行统计 二. 从执行效率上 ...

  9. mysql中checktable语句来_MySQL的命令check table用法

    MySQL日志文件里出现以下错误,MySQL表通常不会发生crash情况,一般是在更新数据库时MySQL停止会导致. CHECK TABLE语法 CHECK TABLE tbl_name[,tbl_n ...

最新文章

  1. 从多媒体技术演进看AI技术
  2. TCP/IP 广播的发送和接收
  3. pycryptodom的源码安装
  4. 如何准确看清用户需求?
  5. [云炬python3玩转机器学习]5-4向量化高效运算
  6. Python3 解释执行字符串类型的代码
  7. fiddler抓包1-抓小程序https包
  8. CSS3 Flex布局弹性容器的属性
  9. 多线程中的事务回滚,你真的用对了吗?
  10. 工作流引擎Activiti 学习(表 分类)
  11. 利用WinSock进行有连接的通信
  12. PyTorch 入坑四 梯度、链式法则、计算图与反向传播
  13. 【转】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题
  14. 最小值最大化问题(贪心系列)
  15. android studio生成jks,Android Studio生成keystore签名文件步骤讲解
  16. iPhone各机型屏幕尺寸
  17. 【typescript】infer的理解与使用
  18. vue 项目中 zip 压缩包文件下载
  19. 三菱编程软件GX Works2
  20. windows查看tomcat版本信息

热门文章

  1. 使用DOM Breakpoints找到修改属性的Javascript代码
  2. java 应用程序无法运行_关于解决浏览器无法运行小应用程序问题
  3. linux7自带haprox版本,CentOS7.4—构建最新版haproxy高可用群集
  4. 为什么剩余数不能相加_行测备考:如何快解数量关系中的剩余定理
  5. mysql的initial_mysql Lost connection to MySQL server at ‘reading initial communication packet
  6. 新手学python书籍推荐_新手学python看哪本书
  7. 西门子博图的FB块_西门子S7-300/400PLC OB-FB-FC-DB块介绍
  8. JAVA复习5(集合——集合的遍历 Iteratorforeach、Enumeration——HashMap、HashTable、LinkedHashMap——map的遍历)
  9. 本地tomcat 配置环境变量
  10. java jdbc连接derby,通过JDBC连接到Derby数据库失败