SQL LOAD DATA INFILE вопрос - PullRequest
       22

SQL LOAD DATA INFILE вопрос

0 голосов
/ 09 марта 2011

Как получить команду LOAD DATA INFILE, чтобы пропустить определенные поля.

Допустим, у меня есть следующая таблица:

CREATE TABLE stuff (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL,
    name CHAR(64) NOT NULL,
    junk CHAR(64) NOT NULL,
    a ENUM('N','Y') NOT NULL DEFAULT 'N',
    PRIMARY KEY (id)
);

И мой файл:

,name1,junk1,
,name2,junk2,
,name3,junk3,Y

делает заявление:

LOAD DATA INFILE 'myfile' INTO TABLE stuff FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

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

Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 1
Warning (Code 1265): Data truncated for column 'a' at row 1
Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 2
Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 3
Warning (Code 1265): Data truncated for column 'a' at row 3
Warning (Code 1366): Incorrect integer value: '' for column 'id' at row 4

удаление запятой в начале не приводит к правильному вводу данных.

1 Ответ

3 голосов
/ 09 марта 2011

Вы можете явно установить id в NULL, чтобы он использовал значение автоинкремента.

LOAD DATA INFILE 'myfile' 
INTO TABLE stuff 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
SET id = NULL;

Я также рекомендовал бы удалить первую запятую и явно перечислить столбцы в вашем файле:

LOAD DATA INFILE 'myfile' 
INTO TABLE stuff 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
(name,junk,a)
SET id = NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...