ホームページ >データベース >mysql チュートリアル >SQLite で MySQL の ON DUPLICATE KEY UPDATE 機能を実現するにはどうすればよいですか?

SQLite で MySQL の ON DUPLICATE KEY UPDATE 機能を実現するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-15 14:11:441040ブラウズ

How Can I Achieve MySQL's ON DUPLICATE KEY UPDATE Functionality in SQLite?

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 IGNOREUPDATE を組み合わせたものです。

<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。