У меня есть текстовый файл, который содержит поля, разделенные запятыми. Записи в файле могут быть продублированы. Однако, когда я вставляю их в базу данных, я хочу вставить первое вхождение записи и игнорировать любые повторяющиеся (на основе значения первого поля, которое должно быть уникальным).
Вот мое утверждение, которое вызывает ошибки из-за повторяющихся значений первого поля, которое я отмечаю как уникальное.
LOAD DATA LOCAL INFILE '/var/lib/mysql-files/myfile.txt'
INTO TABLE 'scheme'.'mytable' fields terminated BY ',';
Это оказалось легко. Просто используйте IGNORE
и MySQL будет игнорировать повторное появление.
LOAD DATA INFILE '/var/lib/mysql-files/myfile.txt'
IGNORE INTO TABLE 'scheme'.'mytable' fields terminated BY ',';
Тем не менее, это будет игнорировать все остальные ошибки. Так что следует использовать с осторожностью.
Вы можете использовать loaddata для загрузки строки в таблицу 'temp', затем
INSERT INTO targetTable (firstField, ...set of columns...)
SELECT DISTINCT firstField, ...set of columns...
FROM temp
WHERE firstField NOT IN (SELECT firstField FROM target);
Для этого необходимо: firstField → набор столбцов (функциональная зависимость)
Или вы можете использовать INSERT with IGNORE (без ошибок при дублировании):
INSERT IGNORE INTO targetTable (firstField, ...set of columns...)
SELECT DISTINCT firstField, ...set of columns...
FROM temp;
или как схемы таблиц одинаковы:
INSERT IGNORE INTO targetTable
SELECT *
FROM temp;