数据库数据快速插入的方法

问题:

需要在mysql中造大量的数据。

方式:

一、insert 一条一条插入数据到数据库中。 不适合大量数据的插入。

二、LOAD DATA INFILE 方案

三、extend insert语句(批量插入)

四、使用 mysqlimport 导入数据

优先文案:

二、LOAD DATA INFILE

如果你正在寻找提高原始性能的方案,这无疑是你的首选方案。

LOAD DATA INFILE 是一个专门为 MySQL 高度优化的语句,它直接将数据从 CSV / TSV 文件插入到表中。

注意:

导入的csv/tsv文件的文件名需要与数据库的表名相同。列的顺序与配置文件中的相同。如果第一行是列名,导入时,需要忽略第一行。

如下为一个csv文件示例, csv一般以逗号分隔。

id,tt

200000000000000000000000,200000000000000000000000 200000000000000000000001,200000000000000000000001

1、有两种方法可以使用 LOAD DATA INFILE。你可以把数据文件拷贝到服务端数据目录(通常 /var/lib/mysql-files/),并且运行:

LOAD DATA INFILE '/path/to/products.csv' INTO TABLE products;

2、直接从本地系统中读取。

LOAD DATA LOCAL INFILE '/path/to/products.csv' INTO TABLE products;

客户端文件系统中读取文件,将其透明地拷贝到服务端临时目录,然后从该目录导入。总而言之,这几乎与直接从服务器文件系统加载文件一样快,不过,你需要确保服务器启用了local_infile。如果该选项不能使用local选项。临时开户local_infile也是一个好的选择。

show VARIABLES like "local_infile";

MySQL :: MySQL 5.7 Reference Manual :: 5.1.7 Server System Variables

三、extend insert语句(批量插入)

INSERT INTO user (id, name) VALUES (1, 'Ben'), (2, 'Bob');

批量插入数据,一批插入多少,需要对比测试。

四、使用 mysqlimport 导入数据

mysqlimport 客户端提供了 LOAD DATA INFILEQL 语句的一个命令行接口。mysqlimport 的大多数选项直接对应 LOAD DATA INFILE 子句。

从文件 dump.txt 中将数据导入到 mytbl 数据表中, 可以使用以下命令:

mysqlimport --ignore-lines=1 --fields-terminated-by=, --verbose --local -u root query C:/mysql/bin/mysql-files/address.csv 
mysqlimport -h 127.0.0.1 -uxxxx -pxxx --ignore-lines=1 --fields-terminated-by=, --verbose --local address address.csv

mysqlimport的常用选项介绍

选项

功能

-d or --delete

新数据导入数据表中之前删除数据数据表中的所有信息

-f or --force

不管是否遇到错误,mysqlimport将强制继续插入数据

-i or --ignore

mysqlimport跳过或者忽略那些有相同唯一 关键字的行, 导入文件中的数据将被忽略。

-l or -lock-tables

数据被插入之前锁住表,这样就防止了, 你在更新数据库时,用户的查询和更新受到影响。

-r or -replace

这个选项与-i选项的作用相反;此选项将替代 表中有相同唯一关键字的记录。

--fields-enclosed- by= char

指定文本文件中数据的记录时以什么括起的, 很多情况下 数据以双引号括起。 默认的情况下数据是没有被字符括起的。

--fields-terminated- by=char

指定各个数据的值之间的分隔符,在句号分隔的文件中, 分隔符是句号。您可以用此选项指定数据之间的分隔符。 默认的分隔符是跳格符(Tab)

--lines-terminated- by=str

此选项指定文本文件中行与行之间数据的分隔字符串 或者字符。 默认的情况下mysqlimport以newline为行分隔符。 您可以选择用一个字符串来替代一个单个的字符: 一个新行或者一个回车。

参考文档:

[译] MySQL 最佳实践 —— 高效插入数据 - 知乎

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将XML文件中的大量数据快速插入数据库可以通过以下几种方法实现: 1. 使用XML解析库:选择一种高效的XML解析库,如XML DOM、SAX或StAX,将XML文件解析成内存中的数据结构。然后,使用数据库的批量插入功能,将解析得到的数据一次性插入数据库中,减少插入操作的开销。 2. 使用存储过程:创建一个存储过程,接受XML作为输入参数。存储过程中可使用XML内建函数或OPENXML函数解析XML,并使用循环语句逐条插入数据库。存储过程能够利用数据库的事务机制,确保插入过程的原子性和一致性。 3. 使用批量插入工具:某些数据库提供了专门的批量插入工具,如Oracle的SQL*Loader或SQL Server的BCP工具。将XML文件进行预处理,转换为适合批量插入的格式,然后通过这些工具进行快速插入数据库。 4. 使用数据库的导入功能:某些数据库管理系统提供了导入功能,支持直接将XML文件导入数据库中。可以通过定义数据映射规则或使用XML Schema来指定XML中元素与数据库表之间的对应关系,然后使用数据库的导入功能进行快速插入。 无论采用哪种方法,都需注意处理数据的合法性和一致性,避免因为意外数据格式或错误导致的插入失败或损坏数据库的情况发生。此外,需要根据具体情况选择适合的操作方式,如批量插入、逐条插入或并行插入,以获得最佳的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值