В чем практическая разница между `REPLACE` и `INSERT ... ON DUPLICATE KEY UPDATE` в MySQL?

Мне нужно установить значения всех полей записи с определенным ключом (на самом деле ключ составной), вставляя запись, если записи с таким ключом еще нет.

REPLACE вроде бы подходит для этой задачи, но в то же время на странице руководства по его использованию предлагается INSERT ... ON DUPLICATE KEY UPDATE.

Что из них лучше выбрать и почему?

Единственный "побочный эффект" REPLACE, который приходит мне на ум, это то, что он увеличит значения автоинкремента (к счастью, я их не использую), в то время как INSERT ... ON DUPLICATE KEY UPDATE, вероятно, не увеличит. Какие еще практические различия следует учитывать? В каких конкретных случаях REPLACE может быть предпочтительнее INSERT ... ON DUPLICATE KEY UPDATE и наоборот?

66
задан Ivan 6 February 2012 в 23:54
поделиться