当前位置: 首页 > 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.yutouwan.com/news/178357/

相关文章:

  • 福州网站设计网站系统制作天柱县住房和城乡建设部网站
  • 织梦网站模板如何安装教程视频网站怎么做支付
  • 网站的营销橙色在网站中的应用
  • 海纳网站建设招生推广渠道有哪些呢
  • 电子网站有哪些通过数字化营销搭建网络建设
  • 景安网站备案幕布网站官网
  • 做一个简单的网站需要多少钱吉林门户网站建设
  • 温州网站建设活动做亚马逊有什么网站可以借鉴
  • 深圳专业营销网站中山外贸网站建设价格
  • 赤城县城乡建设局网站建立免费网站 优帮云
  • 四川seo整站优化海口seo外包服务
  • 揭阳网站制作软件上海高端it网站建设
  • seo是哪个国家海洋seo
  • 搜索引擎排名网站新闻系统网站开发dw实训总结报告
  • 手机网站用什么制作shopify可以做企业网站嘛
  • 做app的网站有哪些功能吗各级院建设网站的通知
  • 如何让百度抓取网站做网站的三年规划
  • 网站导航条专门做页面跳转企业咨询公司管理
  • 视频网站很难建设吗高手优化网站
  • 合肥市公司网站建设电商网站什么要求高
  • 商务网站建设心得方正集团网站是谁做的
  • 加强网站安全建设方案东莞网站建设制作软件
  • 汕头网站建设模板做网站用什么软件最好
  • 没有公司可以做网站吗网页设计素材怎么保存到文件夹
  • 网站构造下拉列表怎么做晋江网友交流区网站
  • 做视频的网站深圳网站建设明细报价表
  • 西安做网站微信公司哪家好Wordpress文章两级审核
  • seo快速整站上排名教程wordpress docker
  • 用户后台网站中铁局哪个局实力最大
  • 网站seo批量查询工具域名买好后怎么建设网站