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

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

Решение
В предложении 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;

Оцените статью: (0 голосов)
0 5 0

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

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