Как использовать команду REPLACE в SQLite, если есть два или более условий - PullRequest
5 голосов
/ 07 декабря 2011

Я хочу обновить строку, если она существует в таблице, или вставить ее в SQLite в одном запросе. Из документации SQLite я узнал, что для этого можно использовать команду REPLACE.

Я хочу знать, как использовать REPLACE, если есть два или более условий:

Пример:
Если у меня есть таблица TABLE1 со следующими записями:

  Name   Type   InitialValue  FinalValue
   A      1          20           40
   B      2          23           50
   A      3          40           60
   C      3          54           70 

Здесь комбинация Name и Type будет уникальной.

Я хочу установить initialvalue = 50 и finalvalue = 90, где name = A и Type = 3, если он существует, иначе вставить его.

Я использую эту команду, но выдает эту ошибку:

ЗАМЕНИТЬ В СТОЛ1 (Имя, Тип, Начальное значение, Окончательное значение) ЗНАЧЕНИЯ («А», 3,50,90) ГДЕ Имя = «А» И Тип = 3;

Ошибка:

возле "ГДЕ": синтаксическая ошибка Невозможно выполнить оператор

Как мне достичь своей цели? Пожалуйста, помогите.

1 Ответ

7 голосов
/ 07 декабря 2011

replace аналогичен insert, он просто проверяет, есть ли дублирующий ключ и удаляет строку и вставляет новую, в противном случае просто вставляет

вы можете сделать это, если есть, например, уникальный индекс (Имя, Тип) и если вы набрали следующую команду

REPLACE INTO table1 (Name,Type,InitialValue,FinalValue) VALUES ('A',3,50,90 )

и там уже существует строка с Name = 'A' и Type = 3, она будет заменена

http://www.sqlite.org/lang_createindex.html

CREATE UNIQUE INDEX idx_name_type ON table1(Name,Type)

EDIT: быстрое примечание - ЗАМЕНА всегда УДАЛЯЕТ, а затем ВСТАВЛЯЕТ, так что никогда не стоит использовать его при большой нагрузке, потому что он требует монопольной блокировки при удалении и затем при вставке

некоторые из механизмов баз данных имеют

INSERT ... ON DUPLICATE KEY UPDATE ...

sqlite 3 нет, но вы можете попробовать {} перехватить, если вставка не удалась

http://blog.client9.com/2007/11/sqlite3-and-on-duplicate-key-update.html

SQLite UPSERT - ОБНОВЛЕНИЕ КЛЮЧЕВОГО КЛЮЧА

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...