游标

Mysql高手系列 - 第19篇:mysql游标详解,此技能可用于救火

只谈情不闲聊 提交于 2019-11-30 22:12:33
Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能。 这是Mysql系列第19篇。 环境:mysql5.7.25,cmd命令中进行演示。 代码中被[]包含的表示可选,|符号分开的表示可选其一。 需求背景 当我们需要对一个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

MySQL基础知识

自古美人都是妖i 提交于 2019-11-30 21:04:12
mysql的二进制日志 记录了所有对MySQL数据库的数据增删查改和对表和数据库的修改,需要在myc.cnf配置文件中进行配置 基于段的日志格式:binlog_format=STATEMENT 基于行的日志格式:binlog_format=ROW binlog_row_image=[FULL|MINIMAL|NOBLOB] 混合日志格式:binlog_format=MIXED 根据sql语句由系统决定使用基于段还是基于行的日志格式; 数据量的大小由所执行的sql语句决定 建议使用binlog_format=MIXED 或者 binlog_format=ROW并设置binlog_row_image=MINIMAL 查看二进制日志:mysqlbinlog -vv 日志文件名称,比如: mysqlbinlog -vv mysql-bin.000002 log_bin = mysql-bin # 开启及设置二进制日志文件名称 binlog_format = MIXED # 混合日志格式 sync_binlog = 1 # 二进制日志(binary log)同步到磁盘的频率 rpl_semi_sync_master_wait_point = after_sync expire_logs_days =7 #二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。 数据库优化的几个方面 (1

SQL相关优化

拟墨画扇 提交于 2019-11-30 18:43:52
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/samjustin1/article/details/52314813 第一方面:30种mysql优化sql语句查询的方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。   2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。   3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num is null   可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:   select id from t where num=0   4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num=10 or num=20   可以这样查询:   select id from t where num=10   union all   select id from t where num=20  

Oracle中获取执行计划的几种方法分析

拟墨画扇 提交于 2019-11-30 17:31:18
1. 预估执行计划 - Explain Plan Explain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中。 首先, 在你要执行的SQL语句前加explain plan for,此时将生成的执行计划存储到计划表中,语句如下: explain plan for SQL语句 然后, 在计划表中查询刚刚生成的执行计划,语句如下: select * from table(dbms_xplan.display); 注意:Explain plan只生成执行计划,并不会真正执行SQL语句,因此产生的执行计划有可能不准,因为: 1)当前的环境可能和执行计划生成时的环境不同; 2)不会考虑绑定变量的数据类型; 3)不进行变量窥视。 2. 查询内存中缓存的执行计划 (dbms_xplan.display_cursor) 如果你想获取正在执行的或刚执行结束的SQL语句真实的执行计划(即获取library cache中的执行计划),可以到动态性能视图里查询。方法如下: 1)获取SQL语句的游标 游标分为父游标和子游标,父游标由sql_id(或联合address和hash_value)字段表示,子游标由child_number字段表示。 如果SQL语句正在运行,可以从v$session中获得它的游标信息,如: select status, sql_id,

MySQL的游标

纵然是瞬间 提交于 2019-11-30 16:51:17
python操作mysql 安装 python操作mysql数据库,主要就是通过pymysql模块 pip install pymysql 操作流程 1)建立数据库连接对象 conn 2)通过 conn 创建操作sql的 游标对象 3)编写sql交给 cursor 执行 4)如果是查询,通过 cursor对象 获取结果 5)操作完毕,端口操作与连接 代码步骤 注意 1.对记录增删改默认需要commit() 准备 import pymysql 一.建立连接 conn = pymysql.connect(user='root', passwd='root', database='t5') 二.获取游标对象 # 注:游标不设置参数,查询的结果就是数据元组,数据没有标识性 # 设置pymysql.cursors.DictCursor,查询的结果是字典,key是表的字段cursor = conn.cursor(pymysql.cursors.DictCursor) 三.增删改查 创建表 sql1="create table zx(id int)" cursor.execute(sql1) 增 #单条添加 sql2='insert into zx values(%s)' cursor.execute(sql2,(1,)) cursor.execute(sql2,(2,)) cursor

pymysql 基操全套

江枫思渺然 提交于 2019-11-30 15:12:33
pymysql:python操作mysql 什么是pymysql? pymysql是一个python连接操作mysql数据的一个模块。 没有他我们就不能和mysql连接所以安装... 安装 >: pip3 install pymysql 什么是Cursor游标? 游标(Cursor)是处理 数据 的一种方法,为了查看或者处理 结果集中 的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。 设置pymysql.cursors.DictCursor,查询的结果是字典,key是表的字段 语法 ​ conn.commit() 提交 ​ conn.cursor(pymysql.cursors.DictCursor)设置游标对象 ​ cursor.execute(sql) 执行语sql语句 ​ conn.cursor(pymysql.cursors.DictCursor)设置DictCursor ​ 特殊fetch 取 ​ 查询需要通过fetchone操作 ​ fetchmany(个数) ​ fetchall()全部 增删改查 增删改查之前需要自己创建数据库 # 选取操作的模块 pymysql # pymysql连接数据库的必要参数:主机、端口、用户名、密码、数据库 # 注:pymysql不能提供创建数据库的服务,数据库要提前创建 import pymysql from

oracle游标的使用方法

帅比萌擦擦* 提交于 2019-11-30 14:46:22
oracle游标的使用方法: ①、定义游标 cursor ②、打开游标 open ③、提取游标 fetch ④、关闭游标 close declare --类型定义 cursor c_job is select empno,ename,job,sal from emp where job='MANAGER'; --定义一个游标变量 c_row c_job%rowtype; begin open c_job; loop --提取一行数据到c_row fetch c_job into c_row; --判读是否提取到值,没取到值就退出 --取到值c_job%notfound 是false --取不到值c_job%notfound 是true exit when c_job%notfound; dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal); end loop; --关闭游标 close c_job; end; create or replace function comm.fun_datediff (p_Component varchar2 , p_Subtranhend date, p_Minuend date) RETURN NUMBER IS /*********

Java金典面试题(23-43)

偶尔善良 提交于 2019-11-30 13:15:25
道歉声明:非常感谢大家的评论,你们的评论提的建议我会一一改正,希望大家能见证我的成长,也希望你们有一个写博客的好习惯,写了博客的朋友可以给我留言,我会去关注你们的 24,Java实现多态的原因?? ** Java实现多态的主要原因是依靠父类或接口的引用指向子类对象,从而实现了一个对象指向多种状态的特征 拓展:多态分为编译时多态和运行时多态 编译时多态(大白话,希望你们理解):编译时多态指的是方法的重载 运行时多态:通过 动态绑定 寻找匹配的方法执行,如果当前类中没有匹配 的方法,则沿着继承关系逐层向上,依次在父类或各祖先类中寻找匹配方法,直到Object类 ** 25,HashMap和Hashtable的区别??? ** 区别: (1)线程安全不同,HashMap是线程不安全的,Hashtable是线程安全的 (2)底层初始容量不同,HashMap初始容量为16,Hashtable初始容量为11 拓展:面试官会问:HashMap适合在多线程的情况下使用吗? 不会使用,HashMap和Hashtable都不会在多线程中使用,一般会使用最好使用concurrentHashmap ** 26,简述一下J2ee的设计模式 ** 1, 设计模式一般分为三大类:创建模式,结构模式,行为模式(很重要,如果面试官问你设计模式的话,先说这三种类型)   (1)创建模式:创建模式抽象了实例化过程

arcpy知识点摘录

回眸只為那壹抹淺笑 提交于 2019-11-30 12:28:45
主要摘录自http://desktop.arcgis.com/zh-cn/arcmap/latest/analyze/main/what-is-geoprocessing.htm 容易忘记,挑重点看看 1、ArcPy 按工具、环境、函数、类和模块进行组织。 2、执行地理处理工具时,工具的结果会返回到 Result 对象中。通常,该对象是由工具生成或更新的输出数据集的路径。在其他情况下,它可能会包含其他类型的值,如数值或布尔值。如果工具的输出是多值参数,则这些值可在列表中以列表的形式返回。 以下代码示例显示了如何捕获返回值以及这些值的具体内容: 返回输出要素类的路径。该结果可用作其他函数的输入。 >>> result = arcpy.Buffer_analysis("rivers", "riverBuf", "50 METERS") >>> print result C:\Portland\Portland_OR.gdb\riverBuf >>> arcpy.Clip_analysis("streets", result, "streets_50m_of_rivers") 返回要素数目。 >>> result = arcpy.GetCount_management("streets_50m_of_rivers") >>> print result.getOutput(0) 54

SQL优化的方法

眉间皱痕 提交于 2019-11-30 12:20:51
1、常用字段建索引,一个表索引最多不要超过6个 2、注意UNion和UNion all 的区别。UNION all好 3、没有必要时不要用DISTINCT和ORDER BY,这些动作可以改在客户端执行。它们增加了额外的开销。这同UNION 和UNION ALL一样的道理 4、查询时不要返回不需要的行、列 5、在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数 6、使用GROUP BY ,HAVING时,首先进行数据过滤,再进行GROUP BY ,HAVING,这样开销小。如果Group BY的目的不包括计算,只是分组,那么用Distinct更快。 7、一次更新多条记录比分多次更新每次一条快,就是说批处理好 8、尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。 9、不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。 10、尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。 11、尽量使用“>=”,不要使用“>”。 12、多表连接查询时,过滤多数据的条件放到where语句最后13