Ваш актуальный вопрос:
Мне нужно обновить конкретную запись, например: PRIMARY KEY id = 10, если эта запись не существует, мне нужно вставить ее.
Современные версии Sqlite поддерживают стиль Postgres UPSERT нотация:
INSERT INTO myTable(id, name) VALUES (25, '25th') ON CONFLICT (id) DO UPDATE SET name = '25th';
Предполагая, что id
является первичным ключом или уникальным столбцом, он либо вставит новую строку, либо обновит столбец имени существующей строки с этим id
.
В старых версиях можно использовать INSERT OR REPLACE , чтобы получить нечто похожее:
INSERT INTO myTable(id, name) VALUES (25, 'Original Name');
-- At some later point...
INSERT OR REPLACE INTO myTable(id, name) VALUES (25, '25th');
Из ЗАМЕНИТЬ разрешение конфликта Документация:
Когда происходит нарушение ограничения UNIQUE или PRIMARY KEY, алгоритм REPLACE удаляет ранее существующие строки, которые вызывают нарушение ограничения, перед вставкой или обновлением текущей строки, и команда продолжает нормально выполняться.