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, если он существует, он не создаст новую запись, если она не существует.