SQL/REPLACE

Материал из Энциклопедия о программировании
Перейти к: навигация, поиск

Оператор REPLACE (замена) в языке SQL — оператор замены только в СУБД MySQL. Не путать с оператором обновления UPDATE. Суть замены заключается в том, что оператор удаляет существующую строку и вставляет новую.

Стандарт

Оператор REPLACE это MySQL расширение стандарта SQL.

Принцип работы

Оператор REPLACE работает точно так же, как INSERT, за исключением того, что если старая запись в данной таблице имеет то же значение индекса UNIQUE или PRIMARY KEY, что и новая, то старая запись перед занесением новой будет удалена. Другими словами, команда REPLACE не предоставляет доступа к замещаемой записи. В некоторых старых версиях СУБД MySQL такой доступ иногда оказывался возможным, но это был дефект, который уже исправлен.

Синтаксис

Оператор REPLACE имеет след. синтаксис:

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 и DELETE для таблицы.

При использовании команды REPLACE функция mysql_affected_rows() вернет значение, равное 2, если старая строка была заменена новой. Объясняется это тем, что в таблицу вставляется строка после того, как удаляется дубликат. Это позволяет легко определять, какое действие произвела команда REPLACE — добавление или замещение строки. Достаточно просто проверить, какое число вернула функция mysql_affected_rows()1 — строка добавлена, или 2 — строка замещена.

Следует учитывать, что, если в таблице не используются уникальные индексы (типы UNIQUE или PRIMARY KEY), то применение команды REPLACE не имеет смысла, так как она работает просто как INSERT.

Примеры

Использование REPLACE:

REPLACE INTO `tbl` (`id`, `name`, `city`, `age`) VALUES (5, 'Jon', 'Oklahoma', 25);

См. также

  • INSERT ON DUPLICATE KEY UPDATE — ещё одно расширение MySQL для стандартного SQL, которое либо вставляет, либо обновляет[1].
Шаблон:sql
  1. http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html