[解決済み] SQLite UPSERT / UPDATE OR INSERT
2022-05-13 07:18:52
質問
SQLiteデータベースに対してUPSERT / INSERT OR UPDATEを実行する必要があります。
INSERT OR REPLACEというコマンドがありますが、これは多くの場合、便利です。しかし、外部キーのために自動インクリメントのある ID を維持したい場合、行を削除して新しい行を作成し、その結果この新しい行が新しい ID を持つことになるため、うまくいきません。
これがテーブルとなります。
players - (idの主キー、user_nameのユニークキー)
| id | user_name | age |
------------------------------
| 1982 | johnny | 23 |
| 1983 | steven | 29 |
| 1984 | pepee | 40 |
どのように解決するのですか?
遅ればせながらの回答です。2018年6月4日にリリースされたSQLIte 3.24.0から、ようやくサポートされたのが UPSERT 節がPostgreSQLの構文に準じています。
INSERT INTO players (user_name, age)
VALUES('steven', 32)
ON CONFLICT(user_name)
DO UPDATE SET age=excluded.age;
注意: SQLite 3.24.0 より前のバージョンを使用する必要がある場合、以下を参照してください。 この回答 を参照してください(投稿者:私、@MarqueIV)。
しかし、アップグレードするオプションがある場合、あなたは 強くお勧めします。
というのも、私の解決策とは異なり、ここに投稿されたものは 1 つのステートメントで望ましい動作を実現するからです。さらに、通常より新しいリリースに付属する、他のすべての機能、改善、およびバグ修正も得られます。
関連
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
-
[解決済み] SQLiteでテーブルが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] PostgreSQLで重複して更新された場合の挿入?
-
[解決済み] AndroidでSQLiteを使用する際に、並行処理の問題を回避するにはどうすればよいですか?
-
[解決済み] SQL ServerにおけるINSERT OR UPDATEに関する解決策
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み】PostgreSQLでUPSERT(MERGE、INSERT ... ON DUPLICATE UPDATE)する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン