2012-06-21 2 views
4

При использовании LOAD DATA INFILE существует ли способ получить ту же функциональность, что и ON ON DUPLICATE KEY UPDATE из обычных инструкций INSERT?LOAD DATA INFILE и ON DUPLICATE KEY UPDATE

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

В моей таблице 5 столбцов: A, B, C, D и E. A является первичным ключом. Иногда мне приходится вставлять новые строки со всеми значениями, но иногда мне приходится обновлять только B и C, например. Но дело в том, что я хочу перегруппировать все INSERT или UPDATE в том же файле.

Благодаря

+0

Вы могли бы представить структуру своей целевой таблицы? Кроме того, есть что-то непонятное. Если строка уже существует, почему вы ее обновите? – Sebas

+0

Нет, вы не можете. инструкция load предназначена для простого «slurp во всем файле». Ваш единственный вариант - это параметр «replace», чтобы выполнить полную запись, если загруженная строка имеет основной/уникальный конфликт с существующей записью: http://dev.mysql.com/doc/refman/5.1/en/load -data.html –

+0

Я отредактировал вопрос. Что касается существующих строк, потому что я хочу обновить некоторые из своих полей, но не все. –

ответ

2

Если вы хотите вставить/обновить некоторые из полей, то вы должны загрузить данные в дополнительный стол, а затем использовать INSERT, UPDATE или INSERT ... SELECT + ON дубликатом ключа заявления UPDATE копировать/изменять данные; в противном случае для других полей будет установлено значение NULL.

Опция REPLACE в LOAD DATA INFILE не поможет вам в этом случае.


Кроме того, вы можете использовать Data Import инструмент (формат CSV) в dbForge Студия для MySQL (бесплатно экспресс-выпуск), просто выберите режим импорта Append/Update и указать отображение полей в мастере импорта данных.

+0

Каким будет влияние на выступления? –

+0

Это зависит от размера данных, индексов. Вы должны проверить это, чтобы ответить. – Devart