我正在从CSV文件将20000行的某些数据导入Mysql。
CSV中的列与MySQL表的列顺序不同。如何自动分配与Mysql表列相对应的列?
当我执行
LOAD DATA INFILE'abc.csv' INTO TABLE abc
该查询将所有数据添加到第一列。
请建议用于将数据导入Mysql的自动语法。
我正在从CSV文件将20000行的某些数据导入Mysql。
CSV中的列与MySQL表的列顺序不同。如何自动分配与Mysql表列相对应的列?
当我执行
LOAD DATA INFILE'abc.csv' INTO TABLE abc
该查询将所有数据添加到第一列。
请建议用于将数据导入Mysql的自动语法。
Answers:
您可以使用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版本不允许使用的命令
IGNORE 1 LINES
这里到底是什么吗?提前致谢。
您可能需要设置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条记录的批量记录(具有计算的超快速查询)
mysqli_query($cons, '
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,
RRP_bl = RRP * 1.44 + 8,
ID = NULL
');
$affected = (int) (mysqli_affected_rows($cons))-1;
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');
RRP和RRP_nl和RRP_bl不在csv中,但我们会对其进行计算,然后将其插入。
如果您是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
假设您正在使用xampp和phpmyadmin
您有文件名“ ratings.txt”,表名“ ratings”和数据库名“ movies”
如果您的xampp安装在“ C:\ xampp \”中
复制“ C:\ xampp \ mysql \ data \ movies”文件夹中的“ ratings.txt”文件
LOAD DATA INFILE 'ratings.txt' INTO TABLE ratings FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;
希望如果您在localhost上执行此操作,可以帮助您忽略错误
您可以从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';
我收到错误代码:1290。MySQL服务器正在使用--secure-file-priv选项运行,因此它无法执行此语句
这对我使用wampserver 3.0.6 64bit在Windows 8.1 64位上为我工作。
从C:\ wamp64 \ bin \ mysql \ mysql5.7.14编辑了my.ini文件
删除条目secure_file_priv c:\ wamp64 \ tmp \(或此处的任何目录)
停止一切(退出沼泽等),然后重新开始一切;然后在C:\ wamp64 \ bin \ mysql \ mysql5.7.14 \ data \ u242349266_recur(最后一个目录是我的数据库名称)上平移我的cvs文件
执行LOAD DATA INFILE'myfile.csv'
入表铝
以','结尾的字段
封闭在“”
'\ r \ n'终止的行
忽略1行
...还有VOILA !!!
这些天(到2019年底),我更喜欢使用http://www.convertcsv.com/csv-to-sql.htm之类的工具。 我有很多行可以运行分区块,从而在csv来自时节省了用户错误最终用户电子表格。