问题:
需要在mysql中造大量的数据。
方式:
一、insert 一条一条插入数据到数据库中。 不适合大量数据的插入。
二、LOAD DATA INFILE 方案
三、extend insert语句(批量插入)
四、使用 mysqlimport 导入数据
优先文案:
二、LOAD DATA INFILE
如果你正在寻找提高原始性能的方案,这无疑是你的首选方案。
LOAD DATA INFILE 是一个专门为 MySQL 高度优化的语句,它直接将数据从 CSV / TSV 文件插入到表中。
注意:
导入的csv/tsv文件的文件名需要与数据库的表名相同。列的顺序与配置文件中的相同。如果第一行是列名,导入时,需要忽略第一行。
如下为一个csv文件示例, csv一般以逗号分隔。
id,tt
0000000000000,0000000000000 0000000000001,0000000000001
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 **实践 —— 高效插入数据 - 知乎

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/34853.html