SQLite Upsert: MySQL の ON DUPLICATE KEY UPDATE 機能のミラーリング
MySQL の ON DUPLICATE KEY UPDATE
は、一意のキー制約に基づいて行の挿入または更新を簡素化します。 この 1 つのクエリは、キーが一意であれば新しい行を挿入し、重複キーが見つかった場合には既存の行を更新します。 SQLite には、これに直接相当するものがありません。
SQLite での Upsert の回避策
SQLite は、同じ結果を達成するための代替戦略を提供します。
1. SELECT してから INSERT または UPDATE:
このメソッドは 2 つのクエリを使用します:
SELECT
クエリ。INSERT
クエリの結果に応じて、UPDATE
または SELECT
クエリ。このアプローチには 2 つのデータベース対話が必要であり、パフォーマンスに影響を与える可能性があります。
2. 更新し、失敗した場合は挿入します:
これには、エラー処理を伴う単一の UPDATE
クエリが含まれます:
UPDATE
は既存の行を示し、データが更新されます。UPDATE
(行が存在しないため) は、INSERT
クエリをトリガーします。これによりデータベース呼び出しが 1 つに減りますが、失敗した INSERT
試行 (キーの重複などによる) に対する追加のエラー処理が必要になります。
最適な SQLite Upsert 戦略
最も効率的で堅牢な SQLite の更新/挿入メソッドは、INSERT OR IGNORE
と UPDATE
を組み合わせたものです。
<code class="language-sql">INSERT OR IGNORE INTO visits VALUES ($ip, 0); UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;</code>
これには、「ip」列に UNIQUE
または PRIMARY KEY
制約が必要です。 INSERT OR IGNORE
は挿入を試みます。重複キーが存在する場合、それは黙って無視されます。 後続の UPDATE
は、既存の行のヒット カウンターをインクリメントします。 このソリューションは、効率 (単一のデータベースラウンドトリップ) と重複キー挿入によるエラーの回避の両方を提供します。
以上がSQLite で MySQL の ON DUPLICATE KEY UPDATE 機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。