如果CSV没有所有表格字段,如何将CSV导入表格?

时间:2019-05-20 19:53:05

标签: sql database mariadb load-data-infile

我正在尝试导入包含一堆数据的CSV文件。数据没有主键或唯一标识符,因此我创建了一个带有“ id”字段的表,该字段是主键并自动递增。

可以说该表具有三个字段id,LastName和FirstName。我的CSV文件仅包含LastName,FirstName。我收到一堆错误,说行X不包含所有列的数据。

我试图显式命名要添加的字段,以为自动增量将分配一个值,但在执行此操作时将不起作用:

LOAD DATA LOCAL INFILE '/path/insert.csv' INTO TABLE data (LastName, FirstName);

我遇到相同的错误,第X行不包含所有列的数据...

我试图通过以下方式将id显式设置为Null:

LOAD DATA LOCAL INFILE '/path/insert.csv' INTO TABLE data (id, LastName, FirstName) 
SET id=null;

相同错误第X行未包含所有列的数据。我尝试过:

LOAD DATA LOCAL INFILE '/path/insert.csv' INTO TABLE data 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '/n' SET id=null;

当我这样做时,它将尝试获取CSV中的第一个值并将其分配给id字段,然后为第1行的“ id”列提供不正确的整数值。

如果我使用的CSV文件未包含表中的每个字段,如何将数据添加到表中?谢谢!

编辑:

以下是表格字段:

id        | int(11)  | NO   | PRI | NULL    | auto_increment 

LastName  | tinytext | YES  |     | NULL    |                

FirstName | tinytext | YES  |     | NULL    |                

这是CSV文件:

Smith,John
Coconut,Joe
Ann,Pattye

那些在差异行上,我无法使stackoverflow格式配合使用。

3 个答案:

答案 0 :(得分:0)

您尝试过吗?

LOAD DATA LOCAL INFILE'/path/insert.csv'INTO TABLE data(NULL,LastName,FirstName);

答案 1 :(得分:0)

我从没有亲自使用过MariaDB,但是我使用过的大多数数据库都取决于您如何设置ID列。我将检查以确保将其标记为自动增量。通常,当您将其设置为此类并且将该字段留空以进行插入时,它将自动(显然)增加并为您添加数据。如果没有它,可能会出错。

答案 2 :(得分:0)

LOAD DATA LOCAL
    INFILE '/path/insert.csv'
    INTO TABLE data (@x, LastName, FirstName);

也就是说,将不需要的东西放到@variables中。

该技术还提供了一种在实际存储之前以编程方式修改文本的方法。 (请参阅手册。)

另一种方法是构建一个表,该表具有一组与输入文件匹配的列。 LOAD放入其中;然后使用INSERT ... SELECT ...将内容复制到“真实”表中。这使您在将数据存储到实际位置之前具有更大的能力来调整数据。