通过命令行将csv导入mysql

时间:2011-07-07 04:18:50

标签: mysql csv load-data-infile

我正在尝试将一个非常大的.csv文件(~4gb)导入到mysql中。我正在考虑使用phpmyadmin,但是你的最大上传大小为2mb。有人告诉我,我必须使用命令行。

我打算使用这些说明导入它:http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html#c5680

将.csv表中的第一行设置为mysql表中的列名是什么命令?这个选项可以通过phpmyadmin获得,所以它们也必须是一个mysql命令行版本,对吗?请帮我。谢谢。

-Raj

8 个答案:

答案 0 :(得分:114)

尝试此命令

 load data local infile 'file.csv' into table table
 fields terminated by ','
 enclosed by '"'
 lines terminated by '\n'
 (column1, column2, column3,...)

这里的字段是数据需要放置的实际表字段。括号和后缀的行是可选的,如果您的列用双引号括起来可以帮助,例如Excel导出等。

有关详细信息,请查看manual

要将第一行设置为表列名,只需忽略要读取的行并在命令中添加值。

答案 1 :(得分:10)

你可以做一个

mysqlimport --columns='head -n 1 $yourfile' --ignore-lines=1 dbname $yourfile`

也就是说,如果您的文件以逗号分隔并且不是分号分隔。否则你也可能需要sed通过它。

答案 2 :(得分:9)

试试这个:

mysql -uusername -ppassword --local-infile scrapping -e "LOAD DATA LOCAL INFILE 'CSVname.csv'  INTO TABLE table_name  FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"

答案 3 :(得分:5)

要使用mysqlimport导入带有标题行的csv,只需添加

--ignore-lines=N

(忽略数据文件的前N行)

您已链接的页面中描述了此选项。

答案 4 :(得分:0)

您可以按以下方式添加:

LOAD DATA LOCAL INFILE 'C:/Users/userName/Downloads/tableName.csv' INTO TABLE tableName FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

答案 5 :(得分:0)

另一种选择是使用csvkit库中的csvsql命令。

直接在命令行上使用示例:

csvsql --db mysql:///test --tables yourtable --insert yourfile.csv

这可以直接在命令行上执行,也可以内置在python或shell脚本中以实现自动化(如果您需要对多个文件执行此操作)。

csvsql允许您根据csv的结构动态创建数据库表,因此这是一种精简代码方式,可将csv的第一行自动转换为MySQL表头。

完整的文档和更多示例在这里: https://csvkit.readthedocs.io/en/1.0.3/scripts/csvsql.html

答案 6 :(得分:0)

我知道这是命令行,但是只是一些小技巧,可以尝试一下,如果您有MySQL工作台并且csv不太大,则可以简单地

  • 选择* FROM表
  • 复制整个CSV
  • 将csv粘贴到Workbench的查询结果部分
  • 希望最好

我说最好的希望是因为这是MySQL Workbench。你永远都不知道它什么时候爆炸


如果要在远程服务器上执行此操作,则可以这样做

mysql -h<server|ip> -u<username> -p --local-infile bark -e "LOAD DATA LOCAL INFILE '<filename.csv>'  INTO TABLE <table>  FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"

请注意,我没有在-p之后输入密码,因为在命令行中输入密码是不正确的做法

答案 7 :(得分:0)

大多数答案都缺少一个重点,例如,如果您在Windows上创建了从Microsoft Excel导出的csv文件,并在linux环境中导入了该文件,则会得到意想不到的结果。

正确的语法是

load data local infile 'file.csv' into table table fields terminated by ',' enclosed by '"' lines terminated by '\r\n'

这里的区别是'\r\n'与简单的'\n