Files to MySQL

问题:把一个本地的文件(比如.txt或.csv文件)导入到指定的一张MySQL表中。可以使用mysqlimport或者LOAD DATA命令来完成。这篇文章仅仅是简单介绍一下mysqlimport和LOAD DATA的简单用法。关于LOAD DATA的详细说明,参考What Happens When Using LOAD DATA

1. Prework:创建测试表和文件

首先创建一个测试表:

CREATE TABLE one_piece (
    `no`    INT,
    `name`    VARCHAR(15)
);

然后创建一个测试文件:

cat one_piece.txt
no      name
100     luffy
200     zoro
300     nami
400     usopp
500     sanji
600     chopper
700     robin
800     franky
900     brook
1000    jinbe

2. 使用mysqlimport导入文件

使用下面的命令可以将上面创建的one_piece.txt的内容导入表中:

mysqlimport --ignore-lines=1 \
--fields-terminated-by='\t' \
--local \
-h host \
-P port \
-u username \
-p db_name \
/path/to/one_piece.txt

执行后会让输入密码,之后就执行成功了。

还可以直接在-p后面添加密码,这样就不需要手动输入了:-pyourpassword

可以查看一下:

SELECT * FROM one_piece;

结果:

+------+---------+
| no   | name    |
+------+---------+
|  100 | luffy   |
|  200 | zoro    |
|  300 | nami    |
|  400 | usopp   |
|  500 | sanji   |
|  600 | chopper |
|  700 | robin   |
|  800 | franky  |
|  900 | brook   |
| 1000 | jinbe   |
+------+---------+

需要注意的是,导入的文件名需要和对应的表名一样,比如上面的one_piece.txt和对应的表名one_piece。不然会找不到表名。

3. 导入多个文件到多张表中

使用上面的命令我们可以将多个文件导入多张表中:

mysqlimport --ignore-lines=1 \
--fields-terminated-by='\t' \
--local \
-h host \
-P port \
-u username \
-p db_name \
/path/to/one_piece.txt
/path/to/steins_gate.txt

4. 指定导入的字段

如果想只导入指定的字段,可以使用--columns选项(也叫-c)。字段使用英文逗号隔开。比如:

mysqlimport --ignore-lines=1 \
--fields-terminated-by='\t' \
--columns no,name
--local \
-h 10.55.142.100 \
-P3596 \
-u db_szdev \
-p test \
/path/to/one_piece.txt
/path/to/steins_gate.txt

5. 使用LOAD DATA导入文件

mysqlimport其实是对LOAD DATA的一层封装,这样我们就可以使用LOAD DATA导入文件:

LOAD DATA LOCAL INFILE '/path/to/one_piece.txt' 
INTO TABLE one_piece 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES 
(no,name);

结果是一样的。

6. mysqlimport常用选项

mysqlimport的参数比较多,接下来看看一些常用的参数:

--ignore-lines:用来标识忽略的行数,比如如果文件有表头的话,可以忽略这一行;

--fields-terminated-by:用来标识字段分隔符,常用的有\t,

--local:表示读取本地文件,如果不加的话就会出错;

--delete:在导入之前先删除所有的数据;

-h-P:表示MySQL服务器的地址,不加的话就是本地的MySQL服务器;

-p:使用密码;

后面的test就是对应的数据库名。


 Previous
What Happens When Using LOAD DATA What Happens When Using LOAD DATA
在之前的文章Files to MySQL中简单介绍了mysqlimport和LOAD DATA的使用,也知道了mysqlimport其实就是使用了LOAD DATA语句。在这篇文章中详细介绍一下LOAD DATA这个语句,来看看当使用这个语
2019-12-18
Next 
Data Types in MySQL Data Types in MySQL
1. 开始为了能更好地理解与使用MySQL,根据MySQL文档花点时间整理了一下MySQL的数据类型。MySQL中一共有五大类数据类型,如下图: 这篇文章只对其中的数字类型、字符串类型和时间类型进行总结。 在这些数据类型的使用中,有几个
2019-12-16
  You Will See...