"ЗАМЕНА В" против INSERT [IF] - PullRequest
       26

"ЗАМЕНА В" против INSERT [IF]

5 голосов
/ 14 февраля 2012

Хорошо, у меня есть вопрос, на самом деле не проблема.

У меня есть таблица в моей базе данных, довольно маленькая, всего 3 столбца, но потенциал для роста. У меня есть два решения моей проблемы, но я не уверен, зачем использовать одно или другое.

У меня есть часть данных, которые могут быть, а могут и не быть в базе данных. Два способа решить это. У меня есть уникальный идентификатор, поэтому его легко проверить.

  1. Проверьте, существуют ли записи в базе данных, и если нет, INSERT INTO база данных
  2. Используйте REPLACE INTO, потому что у меня уже есть идентификатор.

Мой вопрос сейчас Какой из них лучше использовать. Каковы плюсы и минусы в использовании любого из 2 результатов. Или есть лучший результат?

Обратите внимание, что данные точно такие же, поэтому нет никакой вероятности, что запись будет обновлена ​​с более новым значением. Таким образом, REPLACE INTO вставит данные, которые уже есть.

1 Ответ

10 голосов
/ 14 февраля 2012

REPLACE INTO здесь не рекомендуется - вам не нужно ничего заменять.Это DELETE, сопровождаемое INSERT, со всеми последствиями.Например, все индексы должны быть обновлены, что приводит к ненужной работе и фрагментации индекса, если вы часто его используете.

С другой стороны, есть ON DUPLICATE KEY UPDATE, который используется в основном для счетчиков, но вы необновление строки с приращениями или любыми другими изменениями значений, так что вам придется использовать странный синтаксис, такой как SET id=id или что-то подобное.

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

`INSERT IGNORE INTO ...`

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

...