如何将带有1列文件的CSV导入到包含2列的DB表中?

时间:2018-03-20 18:40:25

标签: mysql sql csv phpmyadmin

我有这张桌子:

CREATE TABLE `search`.`location` (
                 `id` INT NOT NULL AUTO_INCREMENT ,
                 `location` VARCHAR CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
                  PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_general_ci;

我有一个CSV文件,其中一列包含一些城市:

New York
Boston
Las Vegas
..

当我尝试将该文件导入表时,我收到此错误:

Invalid column count in CSV input on line 1.

我认为这是因为我在表格中有2列(id,location),而CSV文件中只有一列,ID会自动递增。

如何将CSV导入到包含2列的表中,其中一列会自动递增?

1 个答案:

答案 0 :(得分:1)

您可以定义列列表以指定csv包含的列,并(可选)将任何其他列设置为csv文件之外的值。

将列列表添加到LOAD DATA INFILE语句的末尾,以定义要加载的数据列location。您可以选择将id设置为NULL以自动增加值,但无论如何它都会执行此操作。

(`location`)
SET `id` = NULL;

这是一个有效的例子:

mysql> CREATE TABLE `location` (
 `id` INT NOT NULL AUTO_INCREMENT,
 `location` VARCHAR(32) NOT NULL,
  PRIMARY KEY (`id`)
);

mysql> LOAD DATA INFILE '/var/lib/mysql-files/idtest.csv' 
  INTO TABLE`location` 
  FIELDS TERMINATED BY ',' 
  LINES TERMINATED BY '\n' 
  (location) 
  SET id = NULL;
Query OK, 4 rows affected (0.17 sec)
Records: 4  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from `location`;
+----+----------+
| id | location |
+----+----------+
|  1 | "London" |
|  2 | "Paris"  |
|  3 | "Rome"   |
|  4 | "Berlin" |
+----+----------+
4 rows in set (0.00 sec)

文档here