参考url
sqlite3のバージョン確認と、テストテーブル、テストデータ作成
$ /usr/bin/sqlite3 test.db sqlite> select sqlite_version(); 3.26.0 sqlite> CREATE TABLE test_tbl(id INTEGER PRIMARY KEY, name TEXT UNIQUE, age INTEGER); sqlite> .schema test_tbl CREATE TABLE test_tbl(id INTEGER PRIMARY KEY, name TEXT UNIQUE, age INTEGER); sqlite> INSERT INTO test_tbl(id, name, age) values(1, 'Sato', 10);
通常のINSERTによるコンフリクト エラー
sqlite> INSERT INTO test_tbl(id, name, age) values(1, 'Sato', 10); Error: UNIQUE constraint failed: test_tbl.id
「REPLACE INTO」によるUPSERT
The ON CONFLICT Clause によれば 「REPLACE INTO」の実体は「INSERT OR REPLACE」へのエイリアスのようです
sqlite> REPLACE INTO test_tbl(id, name, age) values(1, 'Sato2', 20);
「INTERT INTO ~ ON ON CONFLICT」によるUPSERT
sqlite> INSERT INTO test_tbl(id, name, age) values(4, 'Tanaka', 30) ON CONFLICT(id) DO UPDATE SET name='Tanaka2', age=age+60;