Подтвердить что ты не робот

SQLite "ВСТАВИТЬ ИЛИ ЗАМЕНИТЬ В" и "ОБНОВИТЬ... ГДЕ"

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

4b9b3361

Ответ 1

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

Если вставить INSERT или REPLACE, если строка не существует, или заменить значения, если это произойдет.

Ответ 2

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

Ответ 3

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

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

Ответ 4

REPLACE INTO table(column_list) VALUES(value_list);

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

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

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

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


Это работа вокруг. Не проверена скорость.

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

за которым следует

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

Этот метод позволяет выполнить замену без возникновения триггера.