mysql - mysql主键自增如何LOAD数据?

标签 mysql sql load-data-infile

我想将 csv 文件LOAD DATA加载到现有表中,并且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;

样本.csv:

;john;doe
;jane;doe

\\N;john;doe
\\N;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 值,然后在 LOAD DATA INFILE 中覆盖该值。这可能适合您,而不需要您键入每个列名称。

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      |
+----+-----------+----------+

关于mysql - mysql主键自增如何LOAD数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58489199/

相关文章:

mysql - 返回第 5 个对象并很快将其作为一个长整数

mysql - PHPMyAdmin 的 'Query took' 时间与 MySQL Profiling 信息不同

java - 处理重复 INSERT 语句的最佳实践

mysql 删除中间行并修复主键并按排列顺序

mysql - 在 MySQL 中加载数据 Infile 问题(不正确的字符串值错误)

MySql 在文件字段中加载数据,由于数据中存在 cama,因此用逗号分隔单列数据分成两个字段

php - Yii2 加载数据本地 INFILE

c++ - 将 c++ int 转换为 VARBINARY 并再次返回

php - 如何为我的应用程序的用户添加积分并将其连接到 Android?

sql - 表名作为postgresql中的变量