如何在mysql主键自动递增中加载数据?

如何在mysql主键自动递增中加载数据?,mysql,sql,load-data-infile,Mysql,Sql,Load Data Infile,我想将csv文件中的数据加载到现有表中,并且PK仍然自动递增 重要提示:我不想在加载数据期间显式命名SQL语句中的所有100列 CREATE TABLE IF NOT EXISTS `person` ( id int(20) NOT NULL AUTO_INCREMENT, firstname varchar(30), lastname varchar(30), PRIMARY KEY (`id`) ) engine=innodb AUTO_INCREMEN

我想将csv文件中的数据加载到现有表中,并且PK仍然自动递增

重要提示:我不想在加载数据期间显式命名SQL语句中的所有100列

CREATE TABLE IF NOT EXISTS `person` (
    id int(20) NOT NULL AUTO_INCREMENT,
    firstname varchar(30),
    lastname varchar(30),   
    PRIMARY KEY (`id`)
) engine=innodb AUTO_INCREMENT=0;
sample.csv:

;john;doe
;jane;doe

两者都将产生:

mysql>  LOAD DATA INFILE 'sample.csv' INTO TABLE persons FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n';
ERROR 1366 (HY000): Incorrect integer value: '' for column 'id' at row 1
mysql>  LOAD DATA INFILE 'sample.csv' INTO TABLE persons FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n';
ERROR 1366 (HY000): Incorrect integer value: '\N' for column 'id' at row 1

我无法重现你的错误。在MySQL 5.6.37上测试时,它对我很有效:

mysql> LOAD DATA LOCAL INFILE 'sample.csv' INTO TABLE persons 
  FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n';
Query OK, 2 rows affected (0.02 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from persons;
+----+-----------+----------+
| id | firstname | lastname |
+----+-----------+----------+
|  1 | john      | doe      |
|  2 | jane      | doe      |
+----+-----------+----------+
我的示例数据文件用于\N第一列

我还尝试将第一列设置为非NULL值,然后在加载数据填充中覆盖该值。这可能适用于您,而无需键入每个列名

mysql> LOAD DATA LOCAL INFILE 'sample.csv' INTO TABLE persons 
  FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' 
  SET id = NULL;
Query OK, 2 rows affected (0.01 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from persons;
+----+-----------+----------+
| id | firstname | lastname |
+----+-----------+----------+
|  1 | john      | doe      |
|  2 | jane      | doe      |
|  4 | john      | doe      |
|  5 | jane      | doe      |
+----+-----------+----------+

谢谢你的洞察力!对于您的示例,我发现我尝试使用\\N。在这种情况下,最好按照您的建议使用SET id=NULL。
mysql> LOAD DATA LOCAL INFILE 'sample.csv' INTO TABLE persons 
  FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' 
  SET id = NULL;
Query OK, 2 rows affected (0.01 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from persons;
+----+-----------+----------+
| id | firstname | lastname |
+----+-----------+----------+
|  1 | john      | doe      |
|  2 | jane      | doe      |
|  4 | john      | doe      |
|  5 | jane      | doe      |
+----+-----------+----------+