SQLite " вставить или заменить в "vs." обновление ... где"


Я никогда не видел синтаксис INSERT OR REPLACE INTO names (id, name) VALUES (1, "John") используется в SQL раньше, и мне было интересно, почему это лучше, чем UPDATE names SET name = "John" WHERE id = 1. Есть ли веская причина использовать один над другим. Этот синтаксис специфичен для SQLite?

4   51   2010-02-12 15:18:03

4 ответа:

обновление ничего не будет делать, если строка не существует.

где в качестве вставки или замены будет вставить, если строка не существует, или заменить значения, если это так.

в настоящее время я работаю над таким заявлением и выяснил еще один факт, чтобы заметить: Вставка или замена заменит любые значения, не указанные в инструкции. Например, если ваша таблица содержит столбец "lastname", для которого вы не указали значение, INSERT или REPLACE по возможности аннулирует "lastname" (ограничения позволяют это) или завершится ошибкой.

REPLACE INTO table(column_list) VALUES(value_list);

это более короткая форма

INSERT OR REPLACE INTO table(column_list) VALUES(value_list);

для правильного выполнения замены структура таблицы должна иметь уникальные строки, будь то простой первичный ключ или уникальный индекс.

REPLACE удаляет, затем вставляет запись и вызывает запуск триггера вставки, если они настроены. Если у вас есть триггер на INSERT, вы можете столкнуться с проблемами.


это обойти.. не проверил скорость..

INSERT OR IGNORE INTO table (column_list) VALUES(value_list);

затем на

UPDATE table SET field=value,field2=value WHERE uniqueid='uniquevalue'

этот метод позволяет выполнить замену, не вызывая триггер.

запрос insert или replace вставит новую запись, если id=1 еще не существует.

запрос на обновление будет только oudate id=1, если он существует, он не будет создавать новую запись, если она не существует.