Возможно ли иметь смешанную перезапись / добавление пакетной записи в MySQL? - PullRequest
0 голосов
/ 10 декабря 2010

Я настраиваю загрузчик (используя php) для моего клиента, где они могут выбрать CSV (в заранее определенном формате) на своем компьютере для загрузки. CSV, скорее всего, будет 4000-5000 строк. Php обработает файл, прочитав каждую строку CSV и вставив ее непосредственно в таблицу БД. Эта часть проста.

Однако, в идеале, прежде чем добавлять эти данные в таблицу базы данных, я хотел бы просмотреть 3 столбца (A, B и C) и проверить, есть ли у меня совпадающая комбинация из этих 3 полей в таблица И ЕСЛИ ТАК Я бы скорее ОБНОВИЛ эту строку, а не добавил. Если у меня нет подходящей комбинации этих трех столбцов, я хочу продолжить и ВСТАВИТЬ строку, добавляя данные в таблицу.

Сначала я подумал, что я мог бы сделать столбцы A, B и C уникальным индексом в моей таблице, а затем просто вставлять каждую строку, как-то обнаруживать «неудачный» INSERT (из-за ограничения моего уникального индекса), а затем сделать обновление. Кажется, что этот метод может быть более эффективным, чем создание отдельного запроса SELECT для каждой строки, просто чтобы посмотреть, есть ли в моей таблице соответствующая комбинация.

Третий подход может состоять в том, чтобы просто добавить ВСЕ, не используя уникальный индекс MySQL, а затем получить только последнюю уникальную комбинацию, когда клиент позднее запросит эту таблицу. Однако я стараюсь избегать попадания в эту тонну тонны бесполезных данных.

Мысли о лучших практиках или умных подходах?

Ответы [ 2 ]

1 голос
/ 10 декабря 2010

Если вы сделаете 3 столбца уникальным идентификатором, вы можете сделать INSERT с помощью ON DUPLICATE KEY.

INSERT INTO table (a,b,c,d,e,f) VALUES (1,2,3,5,6,7)
  ON DUPLICATE KEY UPDATE d=5,e=6,f=7;

Подробнее об этой удобной технике вы можете прочитать в руководстве по MySQL .

1 голос
/ 10 декабря 2010

Если вы добавите уникальный индекс в столбцы (A, B, C), то вы можете использовать REPLACE , чтобы сделать это в одном выражении:

REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для ПЕРВИЧНЫЙ КЛЮЧ или УНИКАЛЬНЫЙ индекс, старый строка удаляется до того, как новая строка вставляется ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...