我正在将一些 20000 行的数据从 CSV 文件导入 Mysql。
CSV 中的列与 MySQL 表的列的顺序不同。如何自动分配Mysql表列对应的列?
当我执行
LOAD DATA INFILE'abc.csv' INTO TABLE abc
此查询将所有数据添加到第一列。
请建议将数据导入 Mysql 的自动语法。
我正在将一些 20000 行的数据从 CSV 文件导入 Mysql。
CSV 中的列与 MySQL 表的列的顺序不同。如何自动分配Mysql表列对应的列?
当我执行
LOAD DATA INFILE'abc.csv' INTO TABLE abc
此查询将所有数据添加到第一列。
请建议将数据导入 Mysql 的自动语法。
您可以使用LOAD DATA INFILE命令将csv文件导入表中。
检查此链接MySQL-LOAD DATA INFILE。
LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE abc
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(col1, col2, col3, col4, col5...);
对于 MySQL 8.0 用户:
使用LOCAL
关键字 hold 安全风险,从 MySQL 8.0 开始,该LOCAL
功能False
默认设置为。您可能会看到以下错误:
错误 1148:此 MySQL 版本不允许使用的命令
您可以按照文档中的说明覆盖它。请注意,这种覆盖并不能解决安全问题,而只是承认您意识到并愿意承担风险。
您可能需要设置FIELDS TERMINATED BY ','
分隔符或任何分隔符。
对于 CSV 文件,您的语句应如下所示:
LOAD DATA INFILE 'data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
在导入文件之前,您必须准备以下内容:
假设我们有下表:
使用以下查询创建表:
CREATE TABLE IF NOT EXISTS `survey` (
`projectId` bigint(20) NOT NULL,
`surveyId` bigint(20) NOT NULL,
`views` bigint(20) NOT NULL,
`dateTime` datetime NOT NULL
);
您的 CSV 文件必须正确格式化,例如,请参见下图:
如果一切正常。请执行以下查询以从 CSV 文件加载数据:
注意:请添加 CSV 文件的绝对路径
LOAD DATA INFILE '/var/www/csv/data.csv'
INTO TABLE survey
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
如果一切都完成了。您已成功将数据从 CSV 导出到表格
句法:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL]
INFILE 'file_name' INTO TABLE `tbl_name`
CHARACTER SET [CHARACTER SET charset_name]
FIELDS [{FIELDS | COLUMNS}[TERMINATED BY 'string']]
[LINES[TERMINATED BY 'string']]
[IGNORE number {LINES | ROWS}]
请参阅此示例:
LOAD DATA LOCAL INFILE
'E:\\wamp\\tmp\\customer.csv' INTO TABLE `customer`
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
1分钟内在数据库中批量插入超过7000000条记录(带计算的超快速查询)
LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE tablename
FIELDS TERMINATED by \',\'
LINES TERMINATED BY \'\n\'
IGNORE 1 LINES
(isbn10,isbn13,price,discount,free_stock,report,report_date)
SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))),
RRP_nl = RRP * 1.44 + 8,
ID = NULL
RRP 和 RRP_bl 不在 csv 中,但我们是在插入之后计算出来的。
假设您正在使用 xampp 和 phpmyadmin
你有文件名 'ratings.txt' 表名 'ratings' 和数据库名 'movies'
如果您的 xampp 安装在“C:\xampp\”中
将“ratings.txt”文件复制到“C:\xampp\mysql\data\movies”文件夹中
LOAD DATA INFILE 'ratings.txt' INTO TABLE ratings FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;
如果您在 localhost 上执行此操作,希望这可以帮助您省略错误
如果您LOAD DATA LOCAL INFILE
从 windows shell 运行,并且需要使用OPTIONALLY ENCLOSED BY '"'
,则必须执行以下操作才能正确转义字符:
"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" -u root --password=%password% -e "LOAD DATA LOCAL INFILE '!file!' INTO TABLE !table! FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"^""' LINES TERMINATED BY '\n' IGNORE 1 LINES" --verbose --show-warnings > mysql_!fname!.out
到现在(2019 年底)我更喜欢使用像http://www.convertcsv.com/csv-to-sql.htm这样的工具, 我有很多行可以运行分区块,当 csv 来自最终用户电子表格。
您可以尝试像这样插入:
LOAD DATA INFILE '/tmp/filename.csv' replace INTO TABLE [table name] FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (field1,field2,field3);
我收到错误代码:1290。MySQL 服务器正在使用 --secure-file-priv 选项运行,因此它无法执行此语句
这在使用 wampserver 3.0.6 64 位的 Windows 8.1 64 位上对我有用。
从 C:\wamp64\bin\mysql\mysql5.7.14 编辑 my.ini 文件
删除条目 secure_file_priv c:\wamp64\tmp\ (或您在此处拥有的任何目录)
停止一切 - 退出 wamp 等 - 并重新启动一切;然后将我的 cvs 文件放在 C:\wamp64\bin\mysql\mysql5.7.14\data\u242349266_recur 上(最后一个目录是我的数据库名称)
执行 LOAD DATA INFILE 'myfile.csv'
INTO表校友
以“,”结尾的字段
由'"'包围
以“\r\n”结尾的行
忽略 1 行
……瞧!
您可以从 csv 或文本文件加载数据。如果您有一个包含表中记录的文本文件,您可以在表中加载这些记录。例如,如果您有一个文本文件,其中每一行都是包含每列值的记录,您可以通过这种方式加载记录。
id //field 1
name //field2
1,peter
2,daniel
...
--windows上的例子
LOAD DATA LOCAL INFILE 'C:\\directory_example\\table.txt'
INTO TABLE Table
CHARACTER SET UTF8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';