如何在mysql主键自动递增中加载数据?
我想将csv文件中的数据加载到现有表中,并且PK仍然自动递增 重要提示:我不想在加载数据期间显式命名SQL语句中的所有100列如何在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
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 |
+----+-----------+----------+