[解決済み] テーブルの行をUPDATEしたり、存在しない行をINSERTするにはどうすればよいのでしょうか?
2023-04-22 20:13:08
質問
次のようなカウンタの表があります。
CREATE TABLE cache (
key text PRIMARY KEY,
generation int
);
カウンタの1つをインクリメントするか、対応する行がまだ存在しない場合は0に設定したいと思います。標準SQLで並行処理の問題を起こさずにこれを行う方法はありますか? この操作はトランザクションの一部であったり、別々であったりします。
SQLは、可能であれば、SQLite、PostgreSQL、MySQL上で変更されずに実行されなければなりません。
検索すると、並行処理の問題に苦しむか、データベースに特化したいくつかのアイデアが見つかりました。
-
以下を試してみてください。
INSERT
で新しい行を作成しUPDATE
である。残念ながら、このエラーはINSERT
でのエラーは現在のトランザクションを中止させます。 -
UPDATE
行が変更されていない場合はINSERT
は新しい行となります。 -
MySQL は
ON DUPLICATE KEY UPDATE
節を持つ。
EDIT: すべての素晴らしい返信をありがとうございました。Paul の言うとおりで、これを行うための単一のポータブルな方法はないようです。これは非常に基本的な操作のように思えるので、私にとってはかなり驚きです。
どのように解決するのですか?
MySQL (そしてその後 SQLite) も REPLACE INTO 構文をサポートしています。
REPLACE INTO my_table (pk_id, col1) VALUES (5, '123');
これは自動的に主キーを識別し、更新するために一致する行を見つけ、何も見つからなければ新しいものを挿入します。
ドキュメンテーション https://dev.mysql.com/doc/refman/8.0/en/replace.html
関連
-
[解決済み] MySQLのプロセスリストを見つけ、それらのプロセスを終了させる方法は?
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] SQLでカラムに最大値を持つ行のみを選択する [重複]。
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
-
[解決済み] PostgreSQLで重複して更新された場合の挿入?
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み] SQLデータベースのテーブルでn番目の行を選択する方法は?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
MySqlの整数インデックスと文字列インデックスの失敗または暗黙の変換問題
-
MySQLにおけるorder byの使用方法の詳細
-
MySQLで正規表現を使う 詳細
-
mysqlインデックスが長すぎる特殊なキーが長すぎる解決策
-
[解決済み】マルチパート識別子をバインドできない
-
SQLException。オペランドは1列でなければなりません。
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?
-
[解決済み] SQL ServerにおけるINSERT OR UPDATEに関する解決策
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み] MySQL REPLACE INTOのSQL Server 2005での実装は?