sqlite upsertと新しいreturn句についてのクイックポスト.
返還条項
あなたは公式ドキュメントを読むことができますhere .
何度も、我々は我々自身が我々のデータベースに記録を挿入した後に若干のデータ(おそらくID)を返すことを望むとわかります.バージョン2.0以降
3.35.0
( 2021 - 03 - 12 ) SQLiteサポートRETURNING
によって変更されたデータベース行の結果行(または特定の列)を返すことができますDELETE
, UPDATE
or INSERT
文.INSERT INTO customers (fullName, birthdateTimestamp, address)
VALUES ('Andrew Mitch', 643911868, '206 Grange Road, Gillingham')
RETURNING *;
上記のクエリは実行後、データベースに挿入されたすべての値をid
各行の.このように我々は別のことを避けることができますSELECT
データベースへの問い合わせ.かなりきれいな、ええ?upsert句
あなたは公式ドキュメントを読むことができますhere .
もう一つの良い小さい特徴は
UPSERT
条項.これはバージョン2.0で追加されました3.24.0
( 2018 - 06 - 04 )と原因INSERT
人のように振る舞うUPDATE
またはno-op
, Aの場合UNIQUE CONSTRAINT
またはPRIMARY KEY CONSTRAINT
違反.詳しく説明するために、あなたは
action_records
で使用するすべてのアクションを保持するテーブルusers
特定のセッションのテーブル.新しいアクションが起動されるとき、あなたはaction_record
エラーが発生しなかった場合、または存在していて、同じセッションタイムスタンプを持っている場合ON CONFLICT
古いものを更新します.必要に応じてWHERE
aになるステートメントno-op
, そうでないならば.以下のクエリを実行します.-- Create users table and assign userID and sessionStartTimestamp as a UNIQUE CONSTRAINT.
DROP TABLE IF EXISTS "action_records";
CREATE TABLE IF NOT EXISTS "action_records" (
"id" INTEGER NOT NULL,
"userID" INTEGER NOT NULL,
"sessionStartTimestamp" INTEGER NOT NULL,
"errorMsg" TEXT,
PRIMARY KEY("id" AUTOINCREMENT),
FOREIGN KEY("userID") REFERENCES "users"("id") ON DELETE CASCADE,
UNIQUE(userID, sessionStartTimestamp)
);
-- Insert new record or update the old one based on UNIQUE_CONSTRAINT OF userID & session_start_timestamp
INSERT INTO action_records (userID, errorMsg, sessionStartTimestamp)
VALUES (258, null, 643911868)
ON CONFLICT(userID, sessionStartTimestamp) -- Conflict when a record for the same user and session exists
DO UPDATE SET errorMsg = 'An error occured'
WHERE errorMsg IS NOT NULL -- This will be a no-op in case there is already an error and you don't want to update it
RETURNING *; -- Optionally adding RETURNING to retrieve any number of columns we want
upsertとの組み合わせを返す
私が本当に好きな1つのことは、単に追加することによってそれらの節を組み合わせることができるという事実です
RETURNING *
クエリの最後に.挿入または更新された行(または指定された列)が返されます.Reference
この問題について(sqlite upsertと新しいreturn句についてのクイックポスト.), 我々は、より多くの情報をここで見つけました https://dev.to/mliakos/quick-post-about-the-sqlite-upsert-and-the-new-returning-clause-5fhlテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol