MySQL 导入 csv、excel 或者 sql 文件

1.导入 csv 文件

使用如下命令:

load data infile "csv file path" into table <tablename> fields terminated by ','

上面的 csv 文件以逗号作为分隔符,路径需要用双引号或者单引号括起来。如果是以制表符作为分隔符的话,可不用显示指明域分隔符。

还有一点需要注意,csv 文件或者文本文件的路径要使用绝对路径,否则 mysql 会默认从数据库存储的目录寻找,找不到就会报如下错误:

ERROR 13 (HY000) at line 1: Can't get stat of '/var/lib/mysql/PromotionGroup/attempt_1467708933142_34285938_m_000000_0.1469434545564' (Errcode: 2)

通过 MySQL 自带的工具命令 perror,使用perror 2查看一下错误码的意思:OS error code 2: No such file or directory,意思是没有指定的文件或者目录。

如果使用绝对路径之后还是会报如下错误:

ERROR 13 (HY000) at line 1: Can't get stat of '/fullpath/file.csv' (Errcode: 13)

使用命令perror 13查看错误类型:OS error code 13: Permission denied。根据错误提示,顺其自然地检查文件是否有可读权限,结果是有的,于是各种百度都没有得到正确的答案,百思不得其解,最终选择 Google 在 stackoverflow 找到了我想要的答案。

Try to use LOAD DATA LOCAL INFILE instead of LOAD DATA INFILE.

使用 LOAD DATA LOCAL INFILE 尝试一下,结果真的可以了!

load data local infile 与 load data infile 的区别是什么呢?
使用 LOCAL 关键词,从客户端读取文件。不使用 LOCAL,从服务端读取文件。

2.导入 excel 文件

无需指定分隔符。直接使用下面的命令:

load data infile "excel file path" into table 

注意上面导入文件时,都需要提前建立好与文件内各个段对应好的数据表。并且文件的路径需要使用引号括起来,双引号和单引号都可以。

3.导入 sql 文件

无需提前建立好数据表,直接使用 source 命令:

source /home/abc/abc.sql;

sql 脚本无需双引号括起来。本质上使用 source 执行外部 sql 脚本,sql 脚本会将 sql 脚本中附带的数据导入到创建的数据表中。


参考文献

[1] 关于将EXCEL文件导入到MYSQL数据库的一些方法
[2] linux命令行下导出导入.sql文件
[3] stackoverflow.MySQL import csv file ERROR 13 (HY000): Can’t get stat of /path/file.csv (Errcode: 2)

你可能感兴趣的:(MySQL)