MySQL / MariaDB LOAD DATA INFILE с CSV без столбца id (первичный ключ) и попыткой автоматического увеличения через СУБД не распознает команду SET - PullRequest
0 голосов
/ 19 февраля 2020

Я создал таблицу со следующим определением:

CREATE TABLE vacayhome.photo (
  id INT NOT NULL AUTO_INCREMENT,
  url_path CHAR NOT NULL,
  caption CHAR NOT NULL,
  space_type CHAR NOT NULL,
  is_main BOOLEAN NOT NULL,
  listing_id INT NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (listing_id) REFERENCES listing (id)
    ON UPDATE RESTRICT
);

Данные, которые я пытаюсь вставить в эту таблицу, имеют следующую форму:

url_path,caption,space_type,is_main,listing_id
JFK/015ec48e93480.jpg,An interior designer dream,,true,10000000
JFK/9184bd57e9f80.jpg,"Ready for you, YASS",,false,10000000
BCN/5ccd9b138c76.jpg,"Stay -- you're welcome",,false,10000001
BCN/5fbb3a5ac2b30.jpg,Warm sunlight throughout,,false,10000001

И это мой оператор LOAD DATA в пустую таблицу из документации MariaDB и MySQL:

ALTER TABLE photo DISABLE KEYS;
BEGIN;
LOAD DATA INFILE '/path/to/photos.csv' INTO TABLE photo
  FIELDS
    OPTIONALLY ENCLOSED BY '"'
    TERMINATED BY ','
  LINES
    TERMINATED BY '\n'
  IGNORE 1 ROWS (url_path,caption,space_type,is_main,listing_id);
  SET id=NULL;
COMMIT;
ALTER TABLE photo ENABLE KEYS;

OPTIONALLY ENCLOSED BY используется для столбцов CHAR с запятой в тексте и IGNORE 1 ROWS используется для игнорирования строки заголовка.

Когда я пытаюсь загрузить данные, я получаю следующую ошибку:

ERROR 1193 (HY000) at line 33: Unknown system variable 'id'

Я также пытался добавить SET id = NULL из ответов в других сообщениях StackOverflow, таких как этот . Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

У вас есть лишняя точка с запятой перед директивой SET ID=NULL;. Приведенный ниже код был успешно выполнен в моей локальной среде MySQL:

ALTER TABLE photo DISABLE KEYS;
BEGIN;
LOAD DATA LOCAL INFILE '/path/to/photos.csv' INTO TABLE photo
  FIELDS
    OPTIONALLY ENCLOSED BY '"'
    TERMINATED BY ','
  LINES
    TERMINATED BY '\n'
  IGNORE 1 ROWS (url_path,caption,space_type,is_main,listing_id)
  SET id=NULL;
COMMIT;
ALTER TABLE photo ENABLE KEYS;

Возможно, вы также захотите проверить типы столбцов (например, вместо этого используйте VARCHAR). Удачи.

0 голосов
/ 19 февраля 2020

Вы пытались поместить путь в кавычки?

Как показано ниже ...

url_path,caption,space_type,is_main,listing_id
"JFK/9184bd57e9f80.jpg","Ready for you, YASS",,false,10000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...