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

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

4 ответов


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

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


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


REPLACE INTO table(column_list) VALUES(value_list);

- это короткие формы

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

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

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


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

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

затем by

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

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


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

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