REPLACE INTO
здесь не рекомендуется - вам не нужно ничего заменять.Это DELETE
, сопровождаемое INSERT
, со всеми последствиями.Например, все индексы должны быть обновлены, что приводит к ненужной работе и фрагментации индекса, если вы часто его используете.
С другой стороны, есть ON DUPLICATE KEY UPDATE
, который используется в основном для счетчиков, но вы необновление строки с приращениями или любыми другими изменениями значений, так что вам придется использовать странный синтаксис, такой как SET id=id
или что-то подобное.
Проверка того, существует ли запись в базе данных, будет лучшим решением для вас, новместо того, чтобы использовать другой запрос, позвольте mysql выполнить эту проверку и использовать:
`INSERT IGNORE INTO ...`
Таким образом, если вы попытаетесь вставить любую строку с дублированным уникальным или первичным ключом, она просто не будет вставлена без генерации ошибки.,Обратите внимание на побочный эффект возможного пропуска других сообщений об ошибках, но если вы точно знаете, что вставляете, у вас все будет в порядке.