ON CONFLICT...
или UPSERT
были добавлены в SQLite в версии 3.24.0.
В более ранних версиях вы можете получить аналогичную функциональность с двумя отдельными операторами.
Сначала попробуйте обновить таблицу:
UPDATE taxa
SET rank = ?, parent_id = ?
WHERE taxon_id = ?;
Если строка с taxon_id = ?
существует, она будет обновлена. Если его не будет, ничего не произойдет.
Затем попробуйте вставить новую строку с INSERT OR IGNORE
:
INSERT OR IGNORE INTO taxa (taxon_id, rank, parent_id) VALUES (?, ?, ?);
Если существует строка с taxon_id = ?
, ничего не произойдет (я предполагаю, что taxon_id
- это PRIMARY KEY
таблицы или, по крайней мере, определяется как UNIQUE
). Если он не существует, будет вставлена новая строка.