Как ЗАГРУЗИТЬ ДАННЫЕ в автоинкременте первичного ключа mysql? - PullRequest
0 голосов
/ 21 октября 2019

Я хочу LOAD DATA файл csv в существующую таблицу, но с автоматическим приращением PK.

Важно: я не хочу явно указывать все мои (100) столбцы воператор SQL во время загрузки данных.

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

или

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

1 Ответ

1 голос
/ 21 октября 2019

Я не смог воспроизвести вашу ошибку. У меня это сработало, тестирование на 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 значение, а затем переопределить это в моем НАГРУЗКЕ ДАННЫХ 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      |
+----+-----------+----------+
...