MySQL / 10. Импорт и экспорт данных

Обработка дубликатов индексированных записей

Задача
Записи в ваших входных данных дублируют значения уникальных ключей уже существующих записей таблицы.

Решение
В предложении LOAD DATA укажите, будут ли новые записи игнорироваться или замещать старые.

Обсуждение
По умолчанию при попытке загрузить запись, дублирующую значения столбцов, составляющих первичный ключ или уникальный индекс, генерируется ошибка. Для изменения этой реакции используйте ключевое слово IGNORE или REPLACE после имени файла, чтобы сообщить MySQL, как поступать с дублирующими записями: игнорировать их или заменять ими старые записи.

Предположим, что вы периодически получаете метеорологические данные о текущем состоянии погоды от различных станций наблюдения и храните результаты измерений различных параметров в такой таблице:

CREATE TABLE weatherdata
(
station INT UNSIGNED NOT NULL,
type ENUM('precip','temp','cloudiness','humidity','barometer') NOT NULL,
value FLOAT,
UNIQUE (station, type)
);

Для того чтобы гарантировать, что сохраняется только одна запись для каждого типа измерений от каждой станции, в таблице имеется уникальный ключ на сочетание идентификатора станции и типа измерения. Таблица предназначена для хранения только текущих значений, поэтому когда для данной станции загружается новое значение измерений, предыдущее значение должно исчезнуть. В таких случаях применяется ключевое слово REPLACE:

mysql> LOAD DATA LOCAL INFILE 'data.txt' REPLACE INTO TABLE weatherdata;

Статьи по MySQL на эту тему:

Диагностическая утилита для LOAD DATA
Извлечение и перестановка столбцов файлов данных
Импорт XML в MySQL
Использование временных таблиц для преобразования дат
Использование дат с недостающими частями

Вернуться в раздел: MySQL / 10. Импорт и экспорт данных