MySQL 中while loop repeat 的基本用法
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
MySQL 中while loop repeat 的基本用法相关推荐
- mysql中模糊查询的四种用法介绍
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user ...
- mysql 中模糊查询的四种用法介绍
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...
- mysql中模糊查询的四种用法
转载自 https://www.cnblogs.com/songfayuan/articles/7290158.html 下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可 ...
- mysql中insert语句的五种用法
文章目录 前言 一.values参数后单行插入 二.values参数后多行插入 三.搭配select插入数据 四.复制旧表的信息到新表 五.搭配set插入数据 总结 前言 insert语句是标准sql ...
- MySQL 中的三中循环 while loop repeat 的基本用法
-- MySQL中的三中循环 while . loop .repeat 求 1-n 的和-- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO循环体 ...
- mysql中uuid的写法_MySQL IS_UUID()用法及代码示例
MySQL中的此函数用于检查给定的通用唯一标识符(UUID)是否有效.如果参数是有效的string-format UUID,则返回1:如果参数不是有效的UUID,则返回0:如果参数为NULL,则返回N ...
- mysql timestamp add_「timestampdiff」MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法 - seo实验室...
timestampdiff 语法: TIMESTAMPDIFF(Interval,datetime_expr1,datetime_expr2) 说明: 返回日期或日期时间表达式datetime_exp ...
- MySQL中for update的作用和用法
一.for update定义 for update是一种行级锁,又叫排它锁. 一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行. 如果 ...
- mysql中函数mid_MySQL MID()函数的用法详解(代码示例)
在MySQL中,MID()函数返回从指定位置开始的子字符串. MID()和SUBSTR()都是SUBSTRING()的同义词. 基本语法是这样的:MID(str,pos,len) 这里,str是字符串 ...
- MySQL中函数field()的用法
MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序. 函数使用格式如下: order by (str,str1,str2,str3,str4--),str与str1,str ...
最新文章
- 常用的分布式事务解决方案介绍有多少种?
- 编译IGSTK5.2
- 彻底关闭windows server 2008 IPv6
- 浅析ASP.NET的Page.IsPostBack 属性http://www.sina.com.cn 2008年05月06日 11:33 IT168.com
- 想基于K8s按需扩展应用程序,可从这几方面入手
- [ECMAScript] module、export、import分别有什么作用?
- Android 获取当前的时间。年月日,时分秒,星期几
- 好久没有写了,今天就谈谈微信吧!
- 手写 Object.create
- MySQL唯一索引和普通索引的区别
- ChineseBERT Chinese Pretraining Enhanced by Glyph and Pinyin Information
- Html中a标签用法总结:创建email,电话,描点链接等。以及防止链接被搜索引擎收录
- 华三模拟器HCL文件打开/导入失败解决方法
- HTML系统学习(1)
- python换图片_详解Python给照片换底色(蓝底换红底)
- 圆的css样式,圆形进度条css3样式
- mysql acid
- Part 1: 3.2 flip flop 触发器寄存器
- Ubuntu18.04便签工具xpad安装
- 基于模板匹配和遗传算法的人眼定位
热门文章
- 2020.06.25 端午节快乐
- python绘制风向玫瑰图和污染物玫瑰图
- Python实现中文转化为对应的拼音以及拼音转化为相应的中文
- ETL介绍与ETL工具比较
- pcl1.8.1+vs2017
- java 参数类型转换_java – 如何从通配符类型转换为参数化类型?
- completion time, flow time和processing time 区别
- 基于SSM的教学质量系统
- 2020-07-07
- c# xml文件新增同级节点_C# xml文件的创建,修改和添加节点 。