参考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;