Поиск

Синтаксис REPLACE

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] имя_таблицы [ {имя_столбца, ...)] VALUES {{выражение| DEFAULT},...),(...),...
или:
REPLACE [LOW_PRIORITY | DELAYED] [INTO] имя_таблицы SET имя_столбца={выражение| DEFAULT}, ...
или:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] имя_таблицы [ {имя_столбца,...)]
SELECT ...
REPLACE работает точно так же, как INSERT, за исключением того, что если строка с тем же значением первичного или уникального ключа в таблице существует, то старая строка удаляется перед вставкой новой. См. раздел 6.1.4.
Следует отметить, что использование REPLACE не имеет смысла, если только таблица не имеет индексов PRIMARY KEY или UNIQUE. В этом случае оператор полностью эквива­лентен INSERT. Вы можете обращаться к значениям в старой строке и использовать их в новой. Может показаться, что это можно было делать и в некоторых старых версиях MySQL, однако там содержалась ошибка, которая позже была исправлена.
Для использования REPLACE необходимо иметь привилегии INSERT и DELETE для таб­лицы.

Оператор REPLACE возвращает количество строк, которые будут обработаны. Это ко­личество равно сумме удаленных и вставленных строк. Если количество больше 1 для однострочного оператора REPLACE, это значит, что строка была вставлена и ни одной строки не было удалено перед вставкой. Существует возможность, что одна новая стро­ка заменит более одной старой, если у таблицы есть несколько уникальных индексов и новая строка по значению индексных ключей разных уникальных индексов дублирует более чем одну старую строку.
Счетчик обработанных строк позволяет легко определить, выполнил ли оператор REPLACE только добавление новой строки, или производил также замену. При значении 1 выполнялась только вставка, в противном случае - замена.
Если вы пользуетесь программным интерфейсом С API, счетчик обработанных строк можно получить вызовом функции mysql_affected_rows ().
Ниже приведено более детальное описание применяемого алгоритма (это касается также И LOAD DATA. . .REPLACE):

  1. Выполняется попытка вставки новой строки в таблицу.
  2. Если вставка не удается из-за дублирования первичного или уникальных ключей, то:

а) конфликтующие строки удаляются из таблицы;
б) выполняется новая попытка вставки строки.