MySQL 中while loop repeat 的基本用法

-- 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

posted @ 2018-09-19 23:21 韦邦杠 阅读(...) 评论(...) 编辑 收藏

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

  1. mysql中模糊查询的四种用法介绍

    下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示.  比如 SELECT * FROM [user ...

  2. mysql 中模糊查询的四种用法介绍

    下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...

  3. mysql中模糊查询的四种用法

    转载自  https://www.cnblogs.com/songfayuan/articles/7290158.html 下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可 ...

  4. mysql中insert语句的五种用法

    文章目录 前言 一.values参数后单行插入 二.values参数后多行插入 三.搭配select插入数据 四.复制旧表的信息到新表 五.搭配set插入数据 总结 前言 insert语句是标准sql ...

  5. MySQL 中的三中循环 while loop repeat 的基本用法

    -- MySQL中的三中循环 while . loop .repeat 求 1-n 的和-- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO循环体 ...

  6. mysql中uuid的写法_MySQL IS_UUID()用法及代码示例

    MySQL中的此函数用于检查给定的通用唯一标识符(UUID)是否有效.如果参数是有效的string-format UUID,则返回1:如果参数不是有效的UUID,则返回0:如果参数为NULL,则返回N ...

  7. mysql timestamp add_「timestampdiff」MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法 - seo实验室...

    timestampdiff 语法: TIMESTAMPDIFF(Interval,datetime_expr1,datetime_expr2) 说明: 返回日期或日期时间表达式datetime_exp ...

  8. MySQL中for update的作用和用法

    一.for update定义 for update是一种行级锁,又叫排它锁. 一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行. 如果 ...

  9. mysql中函数mid_MySQL MID()函数的用法详解(代码示例)

    在MySQL中,MID()函数返回从指定位置开始的子字符串. MID()和SUBSTR()都是SUBSTRING()的同义词. 基本语法是这样的:MID(str,pos,len) 这里,str是字符串 ...

  10. MySQL中函数field()的用法

    MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序. 函数使用格式如下: order by (str,str1,str2,str3,str4--),str与str1,str ...

最新文章

  1. 常用的分布式事务解决方案介绍有多少种?
  2. 编译IGSTK5.2
  3. 彻底关闭windows server 2008 IPv6
  4. 浅析ASP.NET的Page.IsPostBack 属性http://www.sina.com.cn 2008年05月06日 11:33 IT168.com
  5. 想基于K8s按需扩展应用程序,可从这几方面入手
  6. [ECMAScript] module、export、import分别有什么作用?
  7. Android 获取当前的时间。年月日,时分秒,星期几
  8. 好久没有写了,今天就谈谈微信吧!
  9. 手写 Object.create
  10. MySQL唯一索引和普通索引的区别
  11. ChineseBERT Chinese Pretraining Enhanced by Glyph and Pinyin Information
  12. Html中a标签用法总结:创建email,电话,描点链接等。以及防止链接被搜索引擎收录
  13. 华三模拟器HCL文件打开/导入失败解决方法
  14. HTML系统学习(1)
  15. python换图片_详解Python给照片换底色(蓝底换红底)
  16. 圆的css样式,圆形进度条css3样式
  17. mysql acid
  18. Part 1: 3.2 flip flop 触发器寄存器
  19. Ubuntu18.04便签工具xpad安装
  20. 基于模板匹配和遗传算法的人眼定位

热门文章

  1. 2020.06.25 端午节快乐
  2. python绘制风向玫瑰图和污染物玫瑰图
  3. Python实现中文转化为对应的拼音以及拼音转化为相应的中文
  4. ETL介绍与ETL工具比较
  5. pcl1.8.1+vs2017
  6. java 参数类型转换_java – 如何从通配符类型转换为参数化类型?
  7. completion time, flow time和processing time 区别
  8. 基于SSM的教学质量系统
  9. 2020-07-07
  10. c# xml文件新增同级节点_C# xml文件的创建,修改和添加节点 。