REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... или REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] SELECT ... или REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name SET col_name=expression, col_name=expression,...
Оператор REPLACE
работает точно так же, как INSERT
, за исключением того,
что если старая запись в данной таблице имеет то же значение индекса
UNIQUE
или PRIMARY KEY
, что и новая, то старая запись перед занесением
новой будет удалена. See Раздел 6.4.3, «Синтаксис оператора INSERT
».
Другими словами, команда REPLACE
не предоставляет доступа к замещаемой
записи. В некоторых старых версиях MySQL такой доступ иногда оказывался
возможным, но это был дефект, который уже исправлен.
Для использования REPLACE
у вас должны быть привилегии INSERT
и DELETE
для таблицы.
При использовании команды REPLACE
функция mysql_affected_rows()
вернет
значение, равное 2
, если старая строка была заменена новой. Объясняется
это тем, что в таблицу вставляется строка после того, как удаляется дубликат.
Это позволяет легко определять, какое действие произвела команда REPLACE
-
добавление или замещение строки. Достаточно просто проверить, какое число
вернула функция mysql_affected_rows()
- 1
(строка добавлена) или 2
(замещена).
Следует учитывать, что, если не используются индексы UNIQUE
или PRIMARY KEY
, то применение команды REPLACE
не имеет смысла, так как она работает
просто как INSERT
.