当前位置: 首页 > news >正文

中国空间站的意义响应式网站设计与实现论文

中国空间站的意义,响应式网站设计与实现论文,精准客源,网站改版对网站优化影响最大的问题有哪些这是Mysql系列第19篇。 环境#xff1a;mysql5.7.25#xff0c;cmd命令中进行演示。 代码中被[]包含的表示可选#xff0c;|符号分开的表示可选其一。 需求背景 当我们需要对一个select的查询结果进行遍历处理的时候#xff0c;如何实现呢#xff1f; 此时我们需要使…这是Mysql系列第19篇。 环境mysql5.7.25cmd命令中进行演示。 代码中被[]包含的表示可选|符号分开的表示可选其一。 需求背景 当我们需要对一个select的查询结果进行遍历处理的时候如何实现呢 此时我们需要使用游标通过游标的方式来遍历select查询的结果集然后对每行数据进行处理。 本篇内容 游标定义 游标作用 游标使用步骤 游标执行过程详解 单游标示例 嵌套游标示例 准备数据 创建库javacode2018 创建表test1、test2、test3 /*建库javacode2018*/ drop database if exists javacode2018; create database javacode2018;/*切换到javacode2018库*/ use javacode2018;DROP TABLE IF EXISTS test1; CREATE TABLE test1(a int,b int); INSERT INTO test1 VALUES (1,2),(3,4),(5,6);DROP TABLE IF EXISTS test2; CREATE TABLE test2(a int); INSERT INTO test2 VALUES (100),(200),(300);DROP TABLE IF EXISTS test3; CREATE TABLE test3(b int); INSERT INTO test3 VALUES (400),(500),(600);游标定义 游标Cursor是处理数据的一种方法为了查看或者处理结果集中的数据游标提供了在结果集中一次一行遍历数据的能力。 游标只能在存储过程和函数中使用。 游标的作用 如sql select a,b from test1;上面这个查询返回了test1中的数据如果我们想对这些数据进行遍历处理此时我们就可以使用游标来进行操作。 游标相当于一个指针这个指针指向select的第一行数据可以通过移动指针来遍历后面的数据。 游标的使用步骤 声明游标这个过程只是创建了一个游标需要指定这个游标需要遍历的select查询声明游标时并不会去执行这个sql。 打开游标打开游标的时候会执行游标对应的select语句。 遍历数据使用游标循环遍历select结果中每一行数据然后进行处理。 关闭游标游标使用完之后一定要关闭。 游标语法 声明游标 DECLARE 游标名称 CURSOR FOR 查询语句;一个begin end中只能声明一个游标。 打开游标 open 游标名称;遍历游标 fetch 游标名称 into 变量列表;取出当前行的结果将结果放在对应的变量中并将游标指针指向下一行的数据。 当调用fetch的时候会获取当前行的数据如果当前行无数据会引发mysql内部的NOT FOUND错误。 关闭游标 close 游标名称;游标使用完毕之后一定要关闭。 单游标示例 写一个函数计算test1表中a、b字段所有的和。 创建函数 /*删除函数*/ DROP FUNCTION IF EXISTS fun1; /*声明结束符为$*/ DELIMITER $ /*创建函数*/ CREATE FUNCTION fun1(v_max_a int)RETURNS intBEGIN/*用于保存结果*/DECLARE v_total int DEFAULT 0;/*创建一个变量用来保存当前行中a的值*/DECLARE v_a int DEFAULT 0;/*创建一个变量用来保存当前行中b的值*/DECLARE v_b int DEFAULT 0;/*创建游标结束标志变量*/DECLARE v_done int DEFAULT FALSE;/*创建游标*/DECLARE cur_test1 CURSOR FOR SELECT a,b from test1 where av_max_a;/*设置游标结束时v_done的值为true可以v_done来判断游标是否结束了*/DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_doneTRUE;/*设置v_total初始值*/SET v_total  0;/*打开游标*/OPEN cur_test1;/*使用Loop循环遍历游标*/a:LOOP/*先获取当前行的数据然后将当前行的数据放入v_a,v_b中如果当前行无数据v_done会被置为true*/FETCH cur_test1 INTO v_a, v_b;/*通过v_done来判断游标是否结束了退出循环*/if v_done THENLEAVE a;END IF;/*对v_total值累加处理*/SET v_total  v_total  v_a  v_b;END LOOP;/*关闭游标*/CLOSE cur_test1;/*返回结果*/RETURN v_total;END $ /*结束符置为;*/ DELIMITER ;上面语句执行过程中可能有问题解决方式如下。 错误信息Mysql 创建函数出现This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary mysql的设置默认是不允许创建函数 解决办法1: 执行 SET GLOBAL log_bin_trust_function_creators 1; 不过 重启了 就失效了 注意有主从复制的时候 从机必须要设置  不然会导致主从同步失败 解决办法2 在my.cnf里面设置 log-bin-trust-function-creators1 不过这个需要重启服务 见效果 mysql SELECT a,b FROM test1; ------------ | a    | b    | ------------ |    1 |    2 | |    3 |    4 | |    5 |    6 | ------------ 3 rows in set (0.00 sec)mysql SELECT fun1(1); --------- | fun1(1) | --------- |       3 | --------- 1 row in set (0.00 sec)mysql SELECT fun1(2); --------- | fun1(2) | --------- |       3 | --------- 1 row in set (0.00 sec)mysql SELECT fun1(3); --------- | fun1(3) | --------- |      10 | --------- 1 row in set (0.00 sec)游标过程详解 以上面的示例代码为例咱们来看一下游标的详细执行过程。 游标中有个指针当打开游标的时候才会执行游标对应的select语句这个指针会指向select结果中第一行记录。 当调用fetch 游标名称时会获取当前行的数据如果当前行无数据会触发NOT FOUND异常。 当触发NOT FOUND异常的时候我们可以使用一个变量来标记一下如下代码 DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_doneTRUE;当游标无数据触发NOT FOUND异常的时候将变量v_down的值置为TURE循环中就可以通过v_down的值控制循环的退出。 如果当前行有数据则将当前行数据存到对应的变量中并将游标指针指向下一行数据如下语句 fetch 游标名称 into 变量列表;嵌套游标 写个存储过程遍历test2、test3将test2中的a字段和test3中的b字段任意组合插入到test1表中。 创建存储过程 /*删除存储过程*/ DROP PROCEDURE IF EXISTS proc1; /*声明结束符为$*/ DELIMITER $ /*创建存储过程*/ CREATE PROCEDURE proc1()BEGIN/*创建一个变量用来保存当前行中a的值*/DECLARE v_a int DEFAULT 0;/*创建游标结束标志变量*/DECLARE v_done1 int DEFAULT FALSE;/*创建游标*/DECLARE cur_test1 CURSOR FOR SELECT a FROM test2;/*设置游标结束时v_done1的值为true可以v_done1来判断游标cur_test1是否结束了*/DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done1TRUE;/*打开游标*/OPEN cur_test1;/*使用Loop循环遍历游标*/a:LOOPFETCH cur_test1 INTO v_a;/*通过v_done1来判断游标是否结束了退出循环*/if v_done1 THENLEAVE a;END IF;BEGIN/*创建一个变量用来保存当前行中b的值*/DECLARE v_b int DEFAULT 0;/*创建游标结束标志变量*/DECLARE v_done2 int DEFAULT FALSE;/*创建游标*/DECLARE cur_test2 CURSOR FOR SELECT b FROM test3;/*设置游标结束时v_done1的值为true可以v_done1来判断游标cur_test2是否结束了*/DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done2TRUE;/*打开游标*/OPEN cur_test2;/*使用Loop循环遍历游标*/b:LOOPFETCH cur_test2 INTO v_b;/*通过v_done1来判断游标是否结束了退出循环*/if v_done2 THENLEAVE b;END IF;/*将v_a、v_b插入test1表中*/INSERT INTO test1 VALUES (v_a,v_b);END LOOP b;/*关闭cur_test2游标*/CLOSE cur_test2;END;END LOOP;/*关闭游标cur_test1*/CLOSE cur_test1;END $ /*结束符置为;*/ DELIMITER ;见效果 mysql DELETE FROM test1; Query OK, 9 rows affected (0.00 sec)mysql SELECT * FROM test1; Empty set (0.00 sec)mysql CALL proc1(); Query OK, 0 rows affected (0.02 sec)mysql SELECT * from test1; ------------ | a    | b    | ------------ |  100 |  400 | |  100 |  500 | |  100 |  600 | |  200 |  400 | |  200 |  500 | |  200 |  600 | |  300 |  400 | |  300 |  500 | |  300 |  600 | ------------ 9 rows in set (0.00 sec)成功插入了9条数据。 总结 游标用来对查询结果进行遍历处理 游标的使用过程声明游标、打开游标、遍历游标、关闭游标 游标只能在存储过程和函数中使用 一个begin end中只能声明一个游标 掌握单个游标及嵌套游标的使用 大家下去了多练习一下熟练掌握游标的使用
http://www.sadfv.cn/news/123826/

相关文章:

  • 徐州高端网站建设天眼查企业查询在线查询
  • 网站导航html源码域名回收网站
  • 企业网站备案代理公司wordpress首页置顶文章
  • 有没有做长图的网站没有网站做优化
  • 信息网站建设方案济南logo设计制作
  • 旅游门户网站系统网络优化seo薪酬
  • 网站设计费用明细我的小程序入口
  • h5网站实例中国人做外贸生意的网站
  • 体贴的聊城网站建设根据一个网站仿做新网站是什么网站
  • 网站域名的意思医院网站开发公司
  • 青岛建设集团招聘信息网站微信怎么有wordpress
  • 湖北省京山县建设局网站商业类网站的设计与制作
  • 外贸网站怎么找客户做ppt模板下载网站
  • 天津网站建设论坛saas搭建
  • 深圳建站公司企业建设一个网站大概需要多久
  • 公司网站建设合规吗受欢迎的徐州网站建设
  • 湖南省交通建设质量安全监督管理局网站metro风格网站
  • 做时时网站要多少钱用KEGG网站做通路富集分析
  • 企业网站设计规范如何分享自己的wordpress
  • 网站开发和软件开发工作创建全国文明城市工作总结
  • 鞍山招聘信息最新招聘提升seo搜索排名
  • 南宁隆安网站建设北京模板建站代理
  • 网站建设宀金手指排名响应式酒店网站模板
  • 开发大型网站的最主流语言wordpress侧边栏 菜单
  • 黑龙江省城乡建设厅网站wordpress不同背景图片
  • 收录网站的平台有哪些网站开发个人技能
  • 旅游网站建设规划书模板下载wordpress中国可以用吗
  • 美食网站开发与研究 论文网站收录提交入口
  • 集团企业网站建设成都营销类网站设计
  • 黄石网站建设(乐云践新)网页制作淘宝网站建设