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