游标

sql优化的几种方式

吃可爱长大的小学妹 提交于 2020-01-01 04:30:05
一、为什么要对SQL进行优化 我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进行专门的优化,而随着时间的积累,业务数据量的增多,SQL的执行效率对程序的运行效率的影响逐渐增大,此时对SQL的优化就很有必要。 二、SQL优化的一些方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 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

python python操作MySQL

北城余情 提交于 2020-01-01 03:15:45
  MySQL是Web世界中使用最广泛的数据库服务器,SQLite的特定是轻量级,可嵌入,但不能承受高并发访问,适合桌面和移动应用。而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也远远大于SQLite。此外,MySQL内部有多种数据库引擎,最常用的引擎是支持数据库事务的InnoDB。 一,安装MySQL 这里小编就不详细介绍了,要是有不会安装的可以参考下面博客 http://www.cnblogs.com/wj-1314/p/7573242.html 二,安装MySQL-python 要想使python可以操作mysql 就需要MySQL-python驱动,它是python 操作mysql必不可少的模块。 下载地址: https://pypi.python.org/pypi/MySQL-python/ 下载MySQL-python-1.2.5.zip 文件之后直接解压。进入MySQL-python-1.2.5目录: >>python setup.py install 然后安装pymysql pip install pymysql    三,测试pymysql模块   测试非常简单,检查pymysql模块是否可以正常导入。(在操作数据库的时候,python2一般使用mysqldb,但是在python3中已经不再支持mysqldb了

【Python】python3.6 操作mysql

荒凉一梦 提交于 2019-12-31 11:43:42
1、首先安装mysqldb 下载 mysqldb 使用命令 pip3 install mysqlclient-1.3.12-cp36-cp36m-win32.whl 下载地址: mysqlclient-1.3.12-cp36-cp36m-win32.whl PS.Centos下安装mysql pip3 install mysqlclient 2、链接数据库,并查询数据 #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb.connect(host=MYSQL_ADDR , user=MYSQL_USER , passwd=MYSQL_PWD , db=MYSQL_DB , charset="utf8") # 使用cursor()方法获取操作游标 cursor = db.cursor() # 使用execute方法执行SQL语句 cursor.execute("SELECT VERSION()") # 使用 fetchone() 方法获取一条数据 data = cursor.fetchone() print "Database version : %s " % data # 关闭数据库连接 db.close() #数据获取后使用方法contents = cursor

使用Python对MySQL数据库操作

Deadly 提交于 2019-12-31 11:43:12
本文介绍Python3使用PyMySQL连接数据库,并实现简单的增删改查。 什么是PyMySQL? PyMySQL是Python3.x版本中用于连接MySQL服务器的一个库,Python2.x中则使用mysqldb。 PyMySQL安装 在使用PyMySQL之前,我们需要确保PyMySQL已经安装。 PyMySQL下载地址: https://github.com/PyMySQL/PyMySQL 。 如果还未安装,我们可以使用以下命令安装最新版的PyMySQL: $ pip install PyMySQL 如果你的系统不支持pip命令,可以使用以下方式安装: 1、使用git命令下载安装包安装(你也可以手动下载): $ git clone https://github.com/PyMySQL/PyMySQL $ cd PyMySQL $ python3 setup.py install 2、如果需要制定版本号,可以使用curl命令来安装: $ # X.X 为PyMySQL 的版本号 $ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz $ cd PyMySQL* $ python3 setup.py install 注意: 请确保您有root权限来安装上述模块。 3、数据库连接 连接数据库前

MySQL游标的使用

喜你入骨 提交于 2019-12-31 09:12:47
MySQL游标的使用 游标可以理解为指向数据表中某一行记录的指针,用来指向一个查询结果的某一行,然后通过程序对该行数据进行特定操作。游标每次只能读取一行数据,对于多条记录,需要反复读取,直到游标读取不到数据为止。 游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。 一、数据准备 创建以下三张表:stu(学生)、course(课程)、score(成绩),并输入数据: create table stu( s_id int auto_increment, s_name char(20), sex char(2), age int, phone char(20), addr varchar(100), constraint pk_stu_sid primary key(s_id) ); create table course( c_id int auto_increment, c_name char(20), credits int, constraint pk_course_cid primary key(c_id) ); create table score( s_id int, c_id int, score int, constraint pk_score_sid_cid primary key(s_id,c_id) ); 为以上三张表插入必要的数据,命令如下

ORACLE中DBMS_SQL的用法

こ雲淡風輕ζ 提交于 2019-12-30 18:37:52
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 对于一般的select操作,如果使用动态的sql语句则需要进行以下几个步骤: open cursor---> parse---> define column---> excute---> fetch rows---> close cursor; 而对于dml操作(insert,update)则需要进行以下几个步骤: open cursor---> parse---> bind variable---> execute---> close cursor; 对于delete操作只需要进行以下几个步骤: open cursor---> parse---> execute---> close cursor; www.2cto.com 例一: create table test(n_id number, v_name varchar2(50), d_insert_date date); alter table test add constraint pk_id primary key(n_id); declare v_cursor number; v_sql varchar2(200); v_id number; v_name varchar2(50); v_date date; v_stat number; begin

open cursor for sql

偶尔善良 提交于 2019-12-30 18:17:01
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> open cursor for sql 可以方便的执行动态sql. 动态sql和游标经常性结合在一起使用。 Oracle中Cursor介绍 关键字 概念 类型 异常处理 一 概念 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。 二 类型 Cursor类型包含三种: 隐式Cursor,显式Cursor和Ref Cursor(动态Cursor)。 1. 隐式Cursor: 1).对于Select …INTO…语句,一次只能从数据库中获取到一条数据,对于这种类型的DML Sql语句,就是隐式Cursor。例如:Select /Update / Insert/Delete操作。 2)作用:可以通过隐式Cusor的属性来了解操作的状态和结果,从而达到流程的控制。Cursor的属性包含: SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数 SQL%FOUND 布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功 SQL%NOTFOUND 布尔型 与SQL

[ 转载 ] ORACLE存储过程

不打扰是莪最后的温柔 提交于 2019-12-30 16:46:28
一.什么是存储过程 存储过程,百度百科上是这样解释的,存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。 简单的说就是专门干一件事一段sql语句。 可以由数据库自己去调用,也可以由java程序去调用。 在oracle数据库中存储过程是procedure。 二.为什么要写存储过程 1.效率高 存储过程编译一次后,就会存到数据库,每次调用时都直接执行。而普通的sql语句我们要保存到其他地方(例如:记事本 上),都要先分析编译才会执行。所以想对而言存储过程效率更高。 2.降低网络流量 存储过程编译好会放在数据库,我们在远程调用时,不会传输大量的字符串类型的sql语句。 3.复用性高 存储过程往往是针对一个特定的功能编写的,当再需要完成这个特定的功能时,可以再次调用该存储过程。 4.可维护性高 当功能要求发生小的变化时,修改之前的存储过程比较容易,花费精力少。 5.安全性高 完成某个特定功能的存储过程一般只有特定的用户可以使用,具有使用身份限制,更安全。 三.存储过程基础 1.存储过程结构 (1).基本结构 Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常(可写可不写

Mongodb源码分析--更新记录

蓝咒 提交于 2019-12-29 01:09:30
在之前的 一篇文章 中,介绍了assembleResponse函数(位于instance.cpp第224行),它会根据op操作枚举类型来调用相应的crud操作,枚举类型定义如下: enum Operations { opReply = 1 , /* reply. responseTo is set. */ dbMsg = 1000 , /* generic msg command followed by a string */ dbUpdate = 2001 , /* 更新对象 */ dbInsert = 2002 , // dbGetByOID = 2003, dbQuery = 2004 , dbGetMore = 2005 , dbDelete = 2006 , dbKillCursors = 2007 }; 可以看到dbUpdate = 2001 为更新操作枚举值,下面我们看一下assembleResponse在确定是更新操作时调用的方法,如下: // instance.cpp文件第224行 assembleResponse( Message & m, DbResponse & dbresponse, const SockAddr & client ) { ..... try { if ( op == dbInsert ) { // 添加记录操作

【mongoDB中级篇①】游标cursor

荒凉一梦 提交于 2019-12-28 14:34:38
简述 通俗的说,游标不是查询结果,可以理解为数据在遍历过程中的内部指针,其返回的是一个资源,或者说数据读取接口. 客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制查询得到的结果数量、跳过部分结果、或对结果集按任意键进行排序等! 直接对一个集合调用find()方法时,我们会发现,如果查询结果超过二十条,只会返回二十条的结果,这是因为Mongodb会自动递归find() 返回的游标。 基本操作 当我们使用一个变量来保存 find()的返回值时,其将不会自动进行遍历显示查询结果的操作,并没有真正的去查询数据库,只要当用到的时候(也就是遍历游标的时候)才会到数据库中将数据取出来,和PHP链接mysql资源一样: php代码 $result = mysql_query('select * from message'); //返回的是一个资源 $row=mysql_fetch_assoc($result);//返回sql查询的数组(仅为满足条件的第一条),其内部就有一个指针游标,可以通过循环反复的取出数据 while($f=mysql_fetch_assoc($result)){//每循环一次游标就前进一次,游标走到尾的时候,就不返回值了 $row[]=$f; } var_dump($row); mongoDB代码(js) // while循环 var cursor =