精华内容
下载资源
问答
  • mysql数据库删除一行数据

    千次阅读 2021-01-19 10:09:55
    [MySQL]命令行工具和基本操作原文:[MySQL]命令行工具和基本操作一 MySQL命令行工具 (查看帮助 ---help,或 -?)1)MySQLMySQL是一个简单的SQL外壳(有GNU readline...陈2014-02-24608浏览量mysql 数据导入导出数据的m...

    [MySQL]命令行工具和基本操作

    原文:[MySQL]命令行工具和基本操作

    一 MySQL命令行工具  (查看帮助 ---help,或 -?)

    1)MySQL

    MySQL是一个简单的SQL外壳(有GNU readline功能)。它支持交互式和非交互式使用。当交互使用时,查询结果采用ASCII表格式。当采用非交互式(例如,用...

    文章

    杰克.陈

    2014-02-24

    608浏览量

    mysql 数据导入导出

    数据的mysql命令导出,导入:

    在数据库命令行中只导出数据,不到处数据结构的时候出现secure_file_priv option so it cannot execute this statement的错误。

    解决方法如下:

    1. 新建一个目录到/path/to/mysql-files 并修改...

    文章

    技术小甜

    2017-11-16

    713浏览量

    MySQL默认数据库简介

    类似于MS SQL Server等大型数据库,MySQL数据库也提供了内置的数据库,它们是:

    INFORMATION_SCHEMA

    mysql

    test

    1.information_schema

    其中,第一个数据库INFORMATION_SCHEMA提供了访问数据库元数据...

    文章

    技术小甜

    2017-11-15

    781浏览量

    ff0c35e3aa0877a25f7873cca08f3438.png

    Quick BI 数据可视化分析平台

    2020年入选全球Gartner ABI魔力象限,为中国首个且唯一入选BI产品

    广告

    mysql 5.7 入门增删改查

    前言

    mysql 5.7版本 以下内容为mysql入门基础教程,在这里我总结一下。

    1.创建数据库

    msyql安装完成之后,将会在其data目录下自动创建几个必需的数据库,可以使用show databases;语句来查看当前所有存在的数据库,输入语句如下;

    可以看到,数据库列表中包含6个数据库...

    文章

    吴梦涵

    1970-01-01

    694浏览量

    mysql 5.7 入门增删改查

    前言

    mysql 5.7版本 以下内容为mysql入门基础教程,在这里我总结一下。

    1.创建数据库

    msyql安装完成之后,将会在其data目录下自动创建几个必需的数据库,可以使用show databases;语句来查看当前所有存在的数据库,输入语句如下;

    可以看到,数据库列表中包含6个数据库...

    文章

    李世龙ing

    1970-01-01

    1118浏览量

    mysql 数据库导入\导出(总结备忘)

    数据库的基本导入\导出的命令 是 mysqldump 和 source

    在linux下直接用命令行操作就可以 在windows下 一般情况下有两种方法一个也是用命令行 另一个是用phpmyadmin

    先来说说phpmyadmin 这个工具导出和导入很简单 而且导入时无需建库 直接还原成原来...

    文章

    白及88

    2016-02-24

    3397浏览量

    mysql常用操作

    整理了下MySQL常用操作的命令。

    1)、查看有那些数据库:show databases; 。

    2)、切换数据库:use database 如切换到mysql, use mysql 。

    3)、查看当前工作的数据库:select database(); 。

    4)、查看当前的用户:selec...

    文章

    科技小能手

    2017-11-12

    641浏览量

    mysqldump命令

    1、导出整个数据库

    mysqldump -u 用户名 -p 数据库名 > 存放位置

    比如:mysqldump -u root -p project > c:/a.sql

    2.导出一个表的结构,并且带表中的数据

    mysqldump -u 用户名 -p 数据库名 表名 > 导出...

    文章

    余二五

    2017-11-14

    651浏览量

    mysqldump命令

    1、导出整个数据库

    mysqldump -u 用户名 -p 数据库名 > 存放位置

    比如:mysqldump -u root -p project > c:/a.sql

    2.导出一个表的结构,并且带表中的数据

    mysqldump -u 用户名 -p 数据库名 表名 > 导出...

    文章

    余二五

    2017-11-08

    795浏览量

    网络数据库mysql的配置与应用(一)

    数据库我相信搞IT的各位都很熟悉它吧,呵呵,最有名的就数windows下的sqlserver系列的了,当然还有microsoft的access.其它的还有一些大型企业内部应用的是DB2 以及oracle的了。那么LINUX下有哪些常用的数据库软件呢,这就是偶今天要跟大家一起讨论的my...

    文章

    科技小能手

    2017-11-12

    702浏览量

    Mysql创建、删除用户、用户管理等相关:转载http://www.cnblogs.com/fly1988happy/archive/2011/12/15/2288554.html

    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):

    1.新建用户

    登录MYSQL:

    @>mysql -u root -p

    @>密码

    创建用户:

    mysql> insert into mysql.user(Hos...

    文章

    涂作权

    2016-10-11

    678浏览量

    误删除mysql中的所用用户,如何重新设置root账号和密码

    在练习mysql语句的时候,使用delete将数据库中的所有用户删除了,其中也包括root用户。并进行了flush privileges;这时候发现重新登入mysql已经不能正常登陆。对此我们要重新设置root账号和root密码。具体操作步骤如下:

    删除用户操作:

    1

    2

    mys...

    文章

    科技小能手

    2017-11-12

    695浏览量

    Mysql 常用命令总结

    Mysql安装目录数据库目录/var/lib/mysql/配置文件/usr/share/mysql(mysql.server命令及配置文件)相关命令/usr/bin(mysqladmin mysqldump等命令)启动脚本/etc/init.d/mysql(启动脚本文件mysql的目录)

    系统管理...

    文章

    wei-spring

    2015-05-03

    642浏览量

    PhP数据库 Mysql dos命令

    PhP数据库 Mysql dos命令mysql

    这是一个关系型数据库,存在表的概念。

    结构 数据库可以存放多张表,每个表可以存放多个字段,每个字段可以存放多个记录。

    dos命令操作数据库

    phpstudy使用终端打开数据库

    第一步:

    第二步:打开 MySQL命令行之后弹出这个框

    第三步...

    文章

    幸运码发放

    2019-04-11

    611浏览量

    MySQL基本命令

    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):1.新建用户  1.1 登录MYSQL:  @>mysql -u root -p  @>密码  1.2 创建用户:  mysql> insert into mysql.us...

    文章

    candy-yun

    2017-06-06

    634浏览量

    MySQL基础与操作

    1.SQL基础

    建立数据库

    create database [其他参数]

    删除数据库

    drop database

    建立数据表

    create table (

    数据类型 [默认值] [not null/...

    文章

    文艺小青年

    2017-11-23

    941浏览量

    一招一式攻克linux(七)

    linux数据库服务器 作者:田逸(sery@163.com) 2006年4期 数据库是一项十分重要的网络服务,它被广泛地应用在internet网站、搜索引擎、电子商务等诸多领域。在开源社区,mysql以其开放源代码、性能高效而稳定、多用户多线程等特性获得“世界最受欢迎的...

    文章

    技术小甜

    2017-11-15

    965浏览量

    mysql基本操作

    Mysql创建、删除用户

    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):

    1.新建用户

    登录MYSQL:

    @>mysql -u root -p

    @>密码

    创建用户:

    mysql> insert i...

    文章

    技术小胖子

    2017-11-14

    760浏览量

    安装mysql

    yum -y install mysql mysql-server mysql-devel service mysqld startmysqladmin -uroot -p password "123456"mysql -uroot -pshow databases; use mysql; sho...

    文章

    weibinwps

    2017-12-25

    978浏览量

    MySQL添加用户、删除用户与授权

    版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_34173549/article/details/80871816

    MySQL添加用户、删除用户与授权

    ...

    文章

    追风筝的猪

    2018-07-01

    893浏览量

    mysql基础知识学习

    1      说明

    数据库的命令时不区分大小写的,例如“CREATE DATABASE test”与“create database test”是同样有效的。

    2      连接数据库

    1) 连接到本机上的MYSQL

    连接数据库可以用phpadmin管理平台,也可以用命令行方式,本次我使用...

    文章

    科技小能手

    2017-11-12

    791浏览量

    6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法

    

    mysql安装完之后,登陆后发现只有两个数据库:mysql>show databases;

    +--------------------+

    | Database

    |

    +--------------------+

    | information_schema |

    ...

    文章

    涂作权

    2014-10-15

    1760浏览量

    MySql常用命令大全集合

    1:使用SHOW语句找出在服务器上当前存在什么数据库:

    mysql> SHOW DATABASES;

    2:2、创建一个数据库MYSQLDATA

    mysql> CREATE DATABASE MYSQLDATA;

    3:选择你所创建的数据库

    mysql> USE MYSQLDATA;...

    文章

    营运商

    2016-01-14

    2044浏览量

    DC学院学习笔记(七):基于HeidiSQL的数据库操作

    在本机装了HeidiSQL,开始学习用数据库来进行数据预处理。

    SQL

    SQL查询语句

    查询语句的通用格式SELECT */column FROM table name WHERE condition

    新增语句的通用格式INSERT INTO table_name(column1,column2....

    文章

    kissjz

    2018-02-12

    2118浏览量

    sql操作命令

    1、mysql服务的启动和停止编辑

    net stop mysql

    net start mysql

    2、登陆mysql编辑

    登陆终端(windows cmd或者linux 命令行下)且已经安装mysql-client软件;

    语法如下: mysql -h 主机ip -u用户名 -p用户密码

    例如:...

    文章

    奋斗蒙

    2016-02-20

    918浏览量

    SQL数据库的一些操作

    SQL数据库的一些操作

    ——以 MySQL为例

    //登陆

    mysql -u root -p

    //创建一个名为test_lib的数据库

    CREATE DATABASE test_lib

    //删除一个名为test_lib的数据库

    DROP DATABASE test_lib

    /...

    文章

    feipeng8848

    2017-04-01

    812浏览量

    RHEL 5服务篇—管理以及备份Mysql数据库系统

    上一遍文章中,我们已经学会了怎么安装Mysql数据了,那么我们怎么样管理以及使用Mysql呢?Mysql是一套数据库管理系统,在每一台Mysql服务器中,支持运行对个库,每个库相当于一个容器,其中存放着许许多多的表,表中的每一行包含一条具体的数据关系信息。

    1、查看Mysql数据中的库和表...

    文章

    科技小先锋

    2017-11-15

    889浏览量

    Linux C语言操作MySQL

    原文:

    Linux C语言操作MySQL

    1.MySQL数据库简介

    MySQL是一个开源码的小型关系数据库管理系统,体积小,速度快,总体成本低,开源。MySQL有以下特性:

    (1) 使用C和C++编写,并使用了多种编译器进行测试,保证源码的可移植性。

    (2...

    文章

    杰克.陈

    2014-12-09

    1272浏览量

    MySQL常用命令

    1:使用SHOW语句找出在服务器上当前存在什么数据库:

    mysql> SHOW DATABASES;

    2:2、创建一个数据库MYSQLDATA

    mysql> CREATE DATABASE MYSQLDATA;

    3:选择你所创建的数据库

    mysql> USE MYSQLDATA;...

    文章

    科技小能手

    2017-11-12

    882浏览量

    MySQL数据库学习笔记(一)----MySQL 5.6.21的安装和配置(setup版)

    【正文】

    【开发环境】

    物理机版本:Win 7旗舰版(64位)

    MySQL版本:5.5.40MSI版(64位)

    一、数据库类型:

    (1)关系数据库

    (2)面向对象数据库

    (3)XML数据库

    现在的主流是关系型数据库。

    二、数据库产品:

    大型数据库有:Oracle、Sybase、DB2、SQL...

    文章

    生命壹号

    2016-05-03

    1716浏览量

    展开全文
  • 在实际情况下,很可能遇到会向一个表中插入10条数据,而这样的数据库更新,如果用寻常的方式,在SQLiteOpenHelper.onUpdate()方法中不断的执行SQL语句,那么效率是可想而知的,甚至可能造成整个应用的崩溃!...

    在实际情况下,很可能遇到会向一个表中插入10万条数据,而这样的数据库更新,如果用寻常的方式,在SQLiteOpenHelper.onUpdate()方法中不断的执行SQL语句,那么效率是可想而知的,甚至可能造成整个应用的崩溃!

    解决方案:

    遇到这种情况,其解决方案应为,用做好的db文件替换之前的数据库文件。当然,有人可能有疑问,这样的话,怎么写入到data/data目录下。这个的确是个问题,可是,我们可以将该数据库存放在SD卡目录下。当然,数据库存放在SD卡目录中,的确是对安全性的妥协。

    实现步骤:

    制作db文件,工具可以是navicat for SQLite等;

    将该文件存放在res/raw目录下

    在SQLiteOpenHelper.onUpdate()方法中,删除之前的数据库文件

    在代码中调用到SQLiteOpenHelper.getReadableDatabase()等方法时,如果该数据库不存在,就会调用SQLiteOpenHelper.onCreate()方法创建数据库。

    在SQLiteOpenHelper.onCreate()方法中,我们与一般的使用SQL语句建表不一样,这里直接将raw文件夹下的数据库文件复制到对应的路径下即可。

    总结:

    以上的解决方案可以提升更新数据库性能。

    mysql根据查询结果批量更新多条数据(插入或更新)

    mysql根据查询结果批量更新多条数据(插入或更新) 1.1 前言 mysql根据查询结果执行批量更新或插入时经常会遇到1093的错误问题.基本上批量插入或新增都会涉及到子查询,mysql是建议不要对 ...

    【sql】mysql数据库做两条数据替换的操作,不使用第三方变量

    需求: 1.将数据库中两条数据中的唯一约束列  做值的替换 原始思想: 将两条数据查出来,在程序中设置第三方变量,进行两条数据的替换,然后将原始两条数据删除,将新的两条替换后的数据插入. 新思想: 1 ...

    向数据库添加100W 条数据 性能测试

    向数据库添加100W 条数据 性能测试 : 参考的相关网站目录: JDBC实现往MySQL插入百万级数据 https://www.cnblogs.com/fnz0/p/5713102.html MyS ...

    sqlserver 如何瞬间执行上万条数据

    核心的内容是:使用自定义表类型 第一步:创建存储过程P_T1DeclareInfo_Upload_new 参数: T1DeclareInfo_UploadPNSN_Param  类型 T1Declar ...

    [MyBatis]五分钟向MySql数据库插入一千万条数据 批量插入 用时5分左右

    本例代码下载:https://files.cnblogs.com/files/xiandedanteng/InsertMillionComparison20191012.rar 我的数据库环境是mys ...

    JavaScript 上万条数据 导出Excel文件 页面卡死

    最近项目要js实现将数据导出excel文件,网上很多插件实现~~那个开心呀,谁知道后面数据量达到上万条时出问题:浏览器不仅卡死,导出的excel文件一直提示网络失败.... debug调试发现var  ...

    在UPDATE中更新TOP条数据以及UPDATE更新中使用ORDER BY

    正常查询语句中TOP的运用: SELECT TOP 1000 * FROM MP_MemberGrade   随意更新一张表中满足条件的前N条数据: UPDATE TOP (1) MP_Member ...

    JavaScript 上万条数据 导出Excel文件(改装版)

    最近项目要js实现将数据导出excel文件,网上很多插件实现~~那个开心呀,谁知道后面数据量达到上万条时出问题:浏览器不仅卡死,导出的excel文件一直提示网络失败.... debug调试发现var  ...

    knockout更新列表中的某条数据,knockout.js绑定数组时更新其中一条数据

    knockout是一款前端实现MVVM的JS框架,仅knockout.js一个47kb的文件,相当实用,做前端无刷新页面,快速实现JS与HTML数据交互. knockout目前最新版:knockout ...

    随机推荐

    OpenStack 计算节点关机,虚拟机状态解决办法

    检查服务正常化 1 nova-manage service list 发现很多nova服务没有启动. 全部启动,直到nova-manage service list所有服务都是:)而不是XXX. 虚拟 ...

    Android基础整理之四大组件Activity

    最近准备系统的重新整理复习一下Android的各方面的知识,本着知识分享的原则,我就把梳理过程中一些东西给记录下来,权当一个学习笔记吧. 下面步入正题..... 什么是Activity Activit ...

    Super关键字

    一.super关键字

    hdu 5612 Baby Ming and Matrix games(dfs暴力)

    Problem Description These few days, Baby Ming is addicted to playing a matrix game. Given a n∗m matr ...

    2018-2019-1 20189201《Linux内核原理与分析》第三周作业

    写作业之前,写了时光博物馆参观感受.1978-2018 40年的改革开放历程. 一.C语言中内嵌汇编语言的写法 内嵌汇编的语法如下: asm volatile ( 汇编语句模版: 输出部分: 输入部分 ...

    从MongoDB里面取得json格式的数据,然后存为本地的json文件,然后再从json读取变为dict

    帮宣传下彩印网(www.caiyin.com) 有印刷,广告等等方面的需求就找这个网站吧,没错的. 天气预报在MongoDB中的天气预报的存储方式是: /* 1 */ { "_id&quot ...

    [深入理解Java虚拟机]<垃圾收集器与内存分配策略>

    Overview 垃圾收集考虑三件事: 哪些内存需要回收? 什么时候回收? 如何回收? 重点考虑Java堆中动态分配和回收的内存. Is Object alive? 引用计数法 给对象添加一个引用计数 ...

    extend 与 append 的区别

    >>> A = ['q', 'w', 'e', 'r'] >>> A.extend(['t', 'y']) >>> A ['q', 'w', 'e ...

    展开全文
  • 数据库快速迁移10亿级数据菜菜呀,咱们业务BJKJ有个表数据需要做迁移程序员主力 Y总现在有多少数据?菜菜大约21亿吧,2017年以前的数据没有业务意义了,给你半天时间把这个事搞定,绩效给你A程序员主力 Y总有绩效...

    数据库快速迁移10亿级数据

    菜菜呀,咱们业务BJKJ有个表数据需要做迁移

    d64c2fa34716fa9916d1150fa384967f.png程序员主力 Y总633095b85b26b3fd5b9d85bec1bc68c4.png

    现在有多少数据?

    22c1e7f6e67b162425e61986d325e3a2.png菜菜

    3f708a61acca7baa6ca2448c640fa556.png

    大约21亿吧,2017年以前的数据没有业务意义了,给你半天时间把这个事搞定,绩效给你A

    90b2ae4cf9e9496c5cd9e6cade7fd386.png程序员主力 Y总775c7e17ebc698278aaf84d6edffdcc3.png

    有绩效奖金吗?

    49d4c1132363841222103c58d3d62d41.png菜菜

    4cff007f928cb6da8d1a0bb6c1a2c110.png

    钱的事你去问X总,我当家不管钱

    30618315348291d320b752ecdd9f732a.png程序员主力 Y总a23951bc3172e6623cbe581e8c730973.png

    ...........

    2f2b2cbfc4e93942fb2dd4866cc11750.png菜菜

    5d7545f69e4a60d5ae157de78cd93123.png问题分析

    经过几分钟的排查,数据库情况如下:

    731346bd3387c710aef1d95dbfd7663e.png1. 数据库采用Sqlserver 2008 R2,单表数据量21亿

    2445b0fd8a049114bfa3e2febf8bafdc.png

    b969dd17238b610cd387f3ceb4a0fde1.png2.无水平或者垂直切分,但是采用了分区表。分区表策略是按时间降序分的区,将近30个分区。正因为分区表的原因,系统才保证了在性能不是太差的情况下坚持至今。

    04eaf86090b206afbb9296dd4b581f89.png3.此表除聚集索引之外,无其他索引,无主键(主键其实是利用索引来快速查重的)。所以在频繁插入新数据的情况下,索引调整所耗费的性能比较低。

    6679b435d3af1f32af6a51a50928f6e2.png

    a8faa0b56dbde751a7ff4b91afc68c5d.png

    44698699dd3a2e0ff9dae5bbaa53e2f2.png至于聚集索引和非聚集索引等知识,请各位移步google或者百度。

    d8289da5bd6b4d76892968f6aa7b288f.png

    至于业务,不是太复杂。经过相关人员咨询,大约40%的请求为单条Insert,大约60%的请求为按class_id 和in_time(倒序)分页获取数据。Select请求全部命中聚集索引,所以性能非常高。这也是聚集索引之所以这样设计的目的。

    解决问题

    由于单表数据量已经超过21亿,并且2017年以前的数据几乎不影响业务,所以决定把2017年以前(不包括2017年)的数据迁移到新表,仅供以后特殊业务查询使用。经过查询大约有9亿数据量。

    数据迁移工作包括三个个步骤:

    1.从源数据表查询出要迁移的数据

    2. 把数据插入新表

    3. 把旧表的数据删除

    传统做法

    这里申明一点,就算是传统的做法也需要分页获取源数据,因为你的内存一次性装载不下9亿条数据。

    abc0aec21c83fb2968d2a53d63e64f44.png1.从源数据表分页获取数据,具体分页条数,太少则查询原表太频繁,太多则查询太慢。

    SQL语句类似于

    SELECT * FROM (

    SELECT *,ROW_NUMBER() OVER(ORDER BY class_id,in_time) p FROM  tablexx WHERE in_time 

    ) t WHERE t.p BETWEEN 1 AND 100

    d31447e74a81e464287bf7e2ddb446e6.png2.把查询出来的数据插入目标数据表,这里强调一点,一定不要用单条插入策略,必须用批量插入。

    456ba0aca3f6a3870f4c43dac69938f7.png3.把数据删除,其实这里删除还是有一个小难点,表没有标示列。这里不展开,因为这不是菜菜要说的重点。

    如果你的数据量不大,以上方法完全没有问题,但是在9亿这个数字前面,以上方法显得心有余而力不足。一个字:慢,太慢,非常慢。

    可以大体算一下,假如每秒可以迁移1000条数据,大约需要的时间为(单位:分)

    900000000/1000/60=15000(分钟)

    大约需要10天^ V ^

    改进做法

    以上的传统做法弊端在哪里呢?

    1. 在9亿数据前查询必须命中索引,就算是非聚集索引菜菜也不推荐,首推聚集索引。

    2.如果你了解索引的原理,你应该明白,不停的插入新数据的时候,索引在不停的更新,调整,以保持树的平衡等特性。尤其是聚集索引影响甚大,因为还需要移动实际的数据。

    提取以上两点共同的要素,那就是聚集索引。相应的解决方案也就应运而生:

    1.按照聚集索引分页查询数据

    2. 批量插入数据迎合聚集索引,即:按照聚集索引的顺序批量插入。

    3. 按照聚集索引顺序批量删除

    由于做了表分区,如果有一种方式把2017年以前的分区直接在磁盘物理层面从当前表剥离,然后挂载到另外一个表,可算是神级操作。有谁能指导一下菜菜,感激不尽

    扩展阅读

    76213e278fdba0b2503123d94ae9a919.png1.一个表的聚集索引的顺序就是实际数据文件的顺序,映射到磁盘上,本质上位于同一个磁道上,所以操作的时候磁盘的磁头不必跳跃着去操作。

    006f7e1ddd4ee9a3a6bb7a001f59273f.png2.存储在硬盘中的每个文件都可分为两部分:文件头和存储数据的数据区。文件头用来记录文件名、文件属性、占用簇号等信息,文件头保存在一个簇并映射在FAT表(文件分配表)中。而真实的数据则是保存在数据区当中的。平常所做的删除,其实是修改文件头的前2个代码,这种修改映射在FAT表中,就为文件作了删除标记,并将文件所占簇号在FAT表中的登记项清零,表示释放空间,这也就是平常删除文件后,硬盘空间增大的原因。而真正的文件内容仍保存在数据区中,并未得以删除。要等到以后的数据写入,把此数据区覆盖掉,这样才算是彻底把原来的数据删除。如果不被后来保存的数据覆盖,它就不会从磁盘上抹掉。

    NetCore 代码(实际运行代码)

    1.第一步:由于聚集索引需要class_id ,所以宁可花2-4秒时间把要操作的class_id查询出来(ORM为dapper),并且升序排列

    DateTime dtMax = DateTime.Parse("2017.1.1");

    var allClassId = DBProxy.GeSourcetLstClassId(dtMax)?.OrderBy(s=>s);

    2.按照第一步class_id 列表顺序查询数据,每个class_id 分页获取,然后插入目标表,全部完成然后删除源表相应class_id的数据。(全部命中聚集索引)

    D int pageIndex = 1; //页码

    int pageCount = 20000;//每页的数据条数

    DataTable tempData =null;

    int successCount = 0;

    foreach (var classId in allClassId)

    {

    tempData = null;

    pageIndex = 1;

    while (true)

    {

    int startIndex = (pageIndex - 1) * pageCount+1;

    int endIndex = pageIndex * pageCount;

    tempData = DBProxy.GetSourceDataByClassIdTable(dtMax, classId, startIndex, endIndex);

    if (tempData == null || tempData.Rows.Count==0)

    {

    //最后一页无数据了,删除源数据源数据然后跳出

    DBProxy.DeleteSourceClassData(dtMax, classId);

    break;

    }

    else

    {

    DBProxy.AddTargetData(tempData);

    }

    pageIndex++;

    }

    successCount++;

    Console.WriteLine($"班级:{classId} 完成,已经完成:{successCount}个");

    }

    DBProxy 完整代码:

    class DBProxy

    {

    //获取要迁移的数据所有班级id

    public static IEnumerable GeSourcetLstClassId(DateTime dtMax)

    {

    var connection = Config.GetConnection(Config.SourceDBStr);

    string Sql = @"SELECT class_id FROM  tablexx WHERE in_time 

    using (connection)

    {

    return connection.Query(Sql, new { dtMax = dtMax }, commandType: System.Data.CommandType.Text);

    }

    }

    public static DataTable GetSourceDataByClassIdTable(DateTime dtMax, int classId, int startIndex, int endIndex)

    {

    var connection = Config.GetConnection(Config.SourceDBStr);

    string Sql = @" SELECT * FROM (

    SELECT *,ROW_NUMBER() OVER(ORDER BY in_time desc) p FROM  tablexx WHERE in_time 

    ) t WHERE t.p BETWEEN @startIndex AND @endIndex ";

    using (connection)

    {

    DataTable table = new DataTable("MyTable");

    var reader = connection.ExecuteReader(Sql, new { dtMax = dtMax, classId = classId, startIndex = startIndex, endIndex = endIndex }, commandType: System.Data.CommandType.Text);

    table.Load(reader);

    reader.Dispose();

    return table;

    }

    }

    public static int DeleteSourceClassData(DateTime dtMax, int classId)

    {

    var connection = Config.GetConnection(Config.SourceDBStr);

    string Sql = @" delete from  tablexx WHERE in_time 

    using (connection)

    {

    return connection.Execute(Sql, new { dtMax = dtMax, classId = classId }, commandType: System.Data.CommandType.Text);

    }

    }

    //SqlBulkCopy 批量添加数据

    public static int AddTargetData(DataTable data)

    {

    var connection = Config.GetConnection(Config.TargetDBStr);

    using (var sbc = new SqlBulkCopy(connection))

    {

    sbc.DestinationTableName = "tablexx_2017";

    sbc.ColumnMappings.Add("class_id", "class_id");

    sbc.ColumnMappings.Add("in_time", "in_time");

    .

    .

    .

    using (connection)

    {

    connection.Open();

    sbc.WriteToServer(data);

    }

    }

    return 1;

    }

    }

    运行报告:

    程序本机运行,开vpn连接远程DB服务器,运行1分钟,迁移的数据数据量为 1915560,每秒约3万条数据

    1915560 / 60=31926 条/秒

    cpu情况(不高):

    acfb4bf99777a9a2713cd98376c9896b.png

    磁盘队列情况(不高):

    dcdb1df1d856f792f1713030fd96b4a4.png

    写在最后

    在以下情况下速度还将提高

    1. 源数据库和目标数据库硬盘为ssd,并且分别为不同的服务器

    2. 迁移程序和数据库在同一个局域网,保障数据传输时候带宽不会成为瓶颈

    3. 合理的设置SqlBulkCopy参数

    4. 菜菜的场景大多数场景下每次批量插入的数据量达不到设置的值,因为有的class_id 对应的数据量就几十条,甚至几条而已,打开关闭数据库连接也是需要耗时的

    5. 单纯的批量添加或者批量删除操作

    b739ec46bb5c46d9c0aa4ce35ba1ea56.png

    关于找一找教程网

    本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

    本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

    [数据库快速迁移10亿级数据]http://www.zyiz.net/tech/detail-128005.html

    展开全文
  • ORM(对象关系映射)指用面向对象的方法处理数据库中的创建表以及数据的增删改查等操作。简而言之,就是将数据库的一张表当作一个类,数据库中的每一记录当作一个对象。在Django中定义一个类,就是在数据库中创建...

    2589725a967e5f832527092d59a5e0a5.png

    在用django操作数据库之前,我们先需要知道什么是orm。

    什么是ORM?

    ORM(对象关系映射)指用面向对象的方法处理数据库中的创建表以及数据的增删改查等操作。

    简而言之,就是将数据库的一张表当作一个类,数据库中的每一条记录当作一个对象。在Django中定义一个类,就是在数据库中创建一张表格。在Django中实例化一个类的对象,就是在数据库中增加了一条记录。在Django中删除一个对象,就是在数据库中删除了一条记录。在DJango中更改一个对象的属性,就是在数据库中修改一条记录的值。在django中遍历查询对象的属性值,就是在数据库中查询记录的值。

    下面是几条django的views视图函数中的命令语句。

    一,增(create,save)from app01.models import *    #create方式一:   Author.objects.create(name='Alvin')

    #create方式二:   Author.objects.create(**{"name":"alex"})

    #save方式一:     author=Author(name="alvin") author.save()    #save方式二:     author=Author()

    author.name="alvin"

    author.save()

    注意,增加时create save两个组合,create是增的动作,save是加的动作,缺一个都不中。

    二,删(delete)>>> Book.objects.filter(id=1).delete()

    (3, {'app01.Book_authors': 2, 'app01.Book': 1})

    如果是多对多的关系: remove()和clear()方法:

    #正向book = models.Book.objects.filter(id=1)#删除第三张表中和女孩1关联的所有关联信息book.author.clear()        #清空与book中id=1 关联的所有数据book.author.remove(2)  #可以为idbook.author.remove(*[1,2,3,4])     #可以为列表,前面加*#反向author = models.Author.objects.filter(id=1)

    author.book_set.clear() #清空与boy中id=1 关联的所有数据

    三,改(update和save)#---------------- update方法直接设定对应属性----------------

    models.Book.objects.filter(id=3).update(title="PHP")    ##sql:

    ##UPDATE "app01_book" SET "title" = 'PHP' WHERE "app01_book"."id" = 3; args=('PHP', 3)

    #--------------- save方法会将所有属性重新设定一遍,效率低-----------

    obj=models.Book.objects.filter(id=3)[0]

    obj.title="Python"

    obj.save()# SELECT "app01_book"."id", "app01_book"."title", "app01_book"."price", # "app01_book"."color",

    "app01_book"."page_num", # "app01_book"."publisher_id" FROM "app01_book" WHERE "app01_book"."id" = 3 LIMIT 1; #

    # UPDATE "app01_book" SET "title" = 'Python', "price" = 3333, "color" = 'red', "page_num" = 556,#

    "publisher_id" = 1 WHERE "app01_book"."id" = 3;

    四,查(update和save)# 查询相关API:#  <1>filter(**kwargs):      它包含了与所给筛选条件相匹配的对象

    # <2>all():    查询所有结果

    #  <3>get(**kwargs):返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会

    抛出错误。#-----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()--------

    #  <4>values(*field):   返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,

    而是一个可迭代的字典序列

    #  <5>exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象

    #  <6>order_by(*field):  对查询结果排序

    #  <7>reverse(): 对查询结果反向排序

    #  <8>distinct(): 从返回结果中剔除重复纪录

    #  <9>values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

    #  <10>count():   返回数据库中匹配查询(QuerySet)的对象数量。

    # <11>first():    返回第一条记录

    # <12>last():  返回最后一条记录

    #  <13>exists(): 如果QuerySet包含数据,就返回True,否则返回False。

    展开全文
  • 面试题:如何造10w测试数据,如何在数据库插入10w条数据数据不重复? 想面试高级测试、高级自动化测试、测试开发岗位,面试时候考察 SQL 就不是简单的增删改查的,必然会问到存储过程。 一问到存储过程基本上是...
  • mysql如何批量删除数据库中的数据

    千次阅读 2021-02-02 03:42:39
    Oracle 数据库,请稍等…… set expname=%date:~0 2021-01-14 18:06:10 我们在操作表的时候难免会遇到误删除,或者删掉数据还想恢复的情况。也许细心的朋友会用begin tran rollback/commit 这种事务来避免出现失误...
  • 二个是想直接用php做个小程序直接导入数据,但是想了想2万条数据处理,百分之百浏览器会一直转,最后不知道是不是有导入失败的!如果有失败的只能一条条找!三个想法三个想法 用到了Navicat Premium 和 ...
  • ASP.NET网页动态添加.更新或删除数据行 看过此篇http://www.cnblogs.com/insus/p/3247935.html的网友,也许明白Insus.NET是...在演示中,只是实现添加,没有实现更新数据,删除数据等功能. 再加上有网友看到后,在评论...
  • 有时候在创建数据库之后,有一些已经存在的数据需要插入到数据库,这就涉及到了数据的大规模批量插入了,如果循环使用insert into table values(a,b,c)插入,速度将会比较慢,应该大部分时间都在事务的提交创建上了...
  • Python学习之旅:访问MySQL数据库Python学习之旅:访问MySQL数据库MySQL是Web世界中使用最广泛的数据库服务器。为服务器端设计的数据库,能承受高并发访问。python如何使用MySQL数据库呢?首先需要安装MySQL,我这里...
  • Mysql错误代码大全1016错误:文件无法打开,使用后台修复或者使用...1054错误:程序文件跟数据库有冲突,请使用正确的程序文件上传上去覆盖。...文章科技探索者2017-11-13603浏览量MySQL数据库备份和还原的常用命令...
  • 一、使用嵌入式关系型SQLite数据库存储数据在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型...
  • php update 多条数据库

    2021-01-28 12:13:16
    node12---mongodb一、传统数据库技术回顾数据库就是存储数据的,那么存储数据就用txt就行了啊,为什么要有数据库?理由之1: 数据库有行、列的概念,数据有关系,数据不是散的。老牌数据库,比如MySQL、SQL Server、...
  • 1 /**2 * 获取随机的N篇文篇3 * @param int $len 文章篇数4 */5 public static function getRandom($len = 6) {6 #查询数据库,得到最小Id7 #SELECT min(id) FROM mimi_aritcle8 $min = Db::name(self:...
  • 学习了几种数据库取中间几记录的方法,总结下:一、在MSSQL,ACCESS中,可以使用关键字top:--从Table 表中取出 m n 的记录:(Not In 版本)SELECT TOP n-m+1 * FROM Table WHERE (id NOT IN (SELECT TOP...
  • 照顾好你的数据,数据库也会照顾你。保持数据库的整洁,查询起来也会更快,应用也会少些错误。半夜被叫醒解决数据问题并不酷。接下来,就和章郎虫博主一起来了解postgresql的表和数据吧。一、选择一个好的数据库对象...
  • mysql在cmd命令下执行数据库操作windows+r 运行cmd命令,执行以下操作!当mysql 数据库文件相对于来说比较大的时候,这个时候你可能在正常环境下的mysql中是导入不进去的,...文章火鸣飞2017-10-202722浏览量SQLite3创...
  • MySQL数据库的基本数据类型

    千次阅读 2021-01-28 03:01:17
    整数类型数值型数据类型主要用来存储数字,包含的类型有:TINYINT、SMALLINT、MEDIUMINT、 INT(INTEGER)、 BIGINT。下面通过一个例子来查看各种类型的所占有的数据空间,注意,我使用的版本是mysql5.6.28,可以通过...
  • 删除记录,数据原有的被废弃,记录头发生变化,主要是打上了删除标记。也就是原有的数据 deleted_flag 变成 1,代表数据删除。但是数据没有被清空,在新一行数据大小小于这一行的时候,可能会占用这一行。这样...
  • 数据库的脏数据问题

    2021-01-27 05:53:31
    脏读dirty reads:当事务读取还未被提交的数据时,就会发生这种事件。举例来说:Transaction 1 修改了一行数据,然后 Transaction 2 在 Transaction 1 还未提交修改操作之前读取了被修改的行。如果 Transaction 1 ...
  • 删除pandas某行数据库

    2020-12-19 19:42:44
    Python 和 Pandas 在 SQLite 数据库中的运用本文讲的是Python 和 Pandas 在 SQLite 数据库中的运用,SQLite是一个数据库引擎,使用它能方便地存储和处理关系型数据。它和csv格式很相似,SQLite把数据存储在一个单独...
  • 表中数据的复制二、更新和删除数据 学前必备知识 一章:SQL Server 数据库环境搭建与使用 二章:SQL Server2019 数据库的基本使用之图形化界面操作 三章:SQL Server2019数据库 之 开启 SQL 语言之旅 一、...
  • 上两遍已经描述了动态多数据源的原理和基础实现了,上面两篇都是从applition.yml中配置多数据源的,这里再拓展补充一下其他场景,如何读取数据源不从applition.yml中配置,实现从数据库中读取数据源配置并动态切换...
  • 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间这里共享一个脚本CREATE TABLE #tablespaceinfo(nameinfo VARCHAR(500) ,rowsinfo BIGINT ,reserved VARCHAR(20) ,datainfo VARCHAR(20) ,index_...
  • jdbc删除数据库数据

    2021-01-27 02:13:59
    Java-JDBCUtil工具类import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;...文章毕来生2017-07-081235浏览量JDBC数据库编程常用接口(转...
  • 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致... 10、合理用运分表与分区表提高数据存放和提取速度。
  • python删除txt一列数据库

    千次阅读 2020-12-20 05:48:15
    带你读《Python数据分析与数据化运营(2版)》之一:Python和数据化运营点击查看二章点击查看三章Python数据分析与数据化运营(2版)宋天龙 著1章 Python和数据化运营数据化运营是提高利润、降低成本、优化...
  • 这里的重复数据数据库中每一列的值都相同的数据,有时候也许是没有主键的原因导致数据可能重复,或者是,除了主键,其他数据重复,那么下面的方法可以都这些重复数据进行删除,保留下重复数据中的一行就可以。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 545,199
精华内容 218,079
关键字:

数据库删除第10条数据