将CSV文件导入到MySQL的临时表中

9
我有一个相当庞大的CSV文件,每个月可能会发生变化,每一行大约有450个数据点。在将数据插入永久表之前,我还需要对其进行操作。因此,我的计划是将其导入到临时表中,进行操作,然后再插入数据。
然而,我找不到任何关于如何将CSV导入临时表(或者,以某种方式导入动态CSV - CSV的第一行具有列标题)的信息。
我尝试创建一个带有一列的临时表,然后导入CSV,但它似乎没有导入。这是我迄今为止尝试过的:
DROP TEMPORARY TABLE IF EXISTS tmp_import;

CREATE TEMPORARY TABLE tmp_import (id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY);

LOAD DATA LOCAL INFILE '/import.csv' INTO TABLE tmp_import
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

作为CSV的示例,它的格式如下(所有数据点都是数字):
500,400,101,93,005,22
4,954,23434,123423432,44

好的,你不能创建没有列的表,所以没有别的选择。一般来说,MySQL的临时表非常动态,即你可以运行一个查询,列会动态地添加——我想导入CSV文件时也可以实现同样的效果。 - Ashley
1
不,你必须创建表并确保列的数量与你想要导入的数量完全相同。 - davejal
1个回答

5
你可以尝试在命令行上使用导入选项。
mysqlimport --ignore-lines=1 --fields-terminated-by=, --verbose --local
    -u [user] -p [database] /path/to/address.csv

/path/to/address.csv 是 CSV 文件的完整路径,在这种情况下,请确保文件地址的名称与表格名称匹配,否则它将无法工作。扩展名可以是任何东西或根本没有扩展名。

或者

LOAD DATA LOCAL INFILE 'File.csv' 
INTO TABLE tableName 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'

参考文献:MySQL中LOAD DATA INFILE的文档

LOAD DATA INFILE语句是一个用于向MySQL数据库中导入数据的高效方法。它可以从本地文件系统或远程服务器上读取数据,并将其插入到表中。这个过程比使用INSERT语句逐行插入数据要快得多。
但是,在使用LOAD DATA INFILE时需要注意以下几点:
1. 文件必须位于MySQL服务器本地文件系统上,或者通过网络协议可以访问。
2. 数据文件必须按照正确的格式进行编写,以便与表的列匹配。
3. 文件路径和名称应该使用正斜杠(/)而不是反斜杠(\),因为在MySQL中,反斜杠被用作转义字符。
4. 如果你想跳过数据文件中的某些列,可以使用SET子句来设置相应的值。
总之,LOAD DATA INFILE是一个非常有用的工具,可以帮助你快速地将大量数据导入到MySQL数据库中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接