以下の内容はhttps://end0tknr.hateblo.jp/entry/20240714/1720908675より取得しました。


sqlite3 での upsertは「REPLACE INTO」or「INTERT INTO ~ ON ON CONFLICT」

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

The ON CONFLICT Clause

sqlite> INSERT INTO test_tbl(id, name, age) values(4, 'Tanaka', 30)
          ON CONFLICT(id) DO UPDATE SET name='Tanaka2', age=age+60;



以上の内容はhttps://end0tknr.hateblo.jp/entry/20240714/1720908675より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14