ホームページ > データベース > mysql チュートリアル > SQLite で MySQL の INSERT ON DUPLICATE KEY UPDATE をシミュレートする方法は?

SQLite で MySQL の INSERT ON DUPLICATE KEY UPDATE をシミュレートする方法は?

Linda Hamilton
リリース: 2025-01-15 14:01:44
オリジナル
257 人が閲覧しました

How to Simulate MySQL's INSERT ON DUPLICATE KEY UPDATE in SQLite?

SQLite での MySQL INSERT ON DUPLICATE KEY UPDATE のシミュレーション: 完全ガイド

リレーショナル データベースでは、多くの場合、レコードがすでに存在する場合はそれを更新し、レコードが存在しない場合は新しいレコードを挿入する必要があります。 MySQL では、この機能は INSERT ... ON DUPLICATE KEY UPDATE 構文を使用して実現できます。これは、挿入操作と更新操作を組み合わせる便利な方法を提供します。

ただし、SQLite はこの構文をネイティブにサポートしていません。したがって、SQLite で同じ効果を実現する別の方法を検討する必要があります。

1 つの方法は、SELECT を INSERT または UPDATE クエリと組み合わせて使用​​することです。これには、最初に SELECT クエリを実行して、同じ一意のキー (IP アドレスなど) を持つレコードが存在するかどうかを確認することが含まれます。存在する場合は、UPDATE クエリを実行して、ヒット列をインクリメントします。存在しない場合は、INSERT クエリが実行されて新しいレコードが作成されます。

あるいは、UPDATE クエリと INSERT クエリを組み合わせることもできます。ここでは、最初に UPDATE クエリが実行され、特定の IP アドレスのヒット列を増分しようとします。成功した場合、レコードは存在し、操作は完了します。 UPDATE が失敗した場合 (レコードが存在しないため)、INSERT クエリが実行されて新しいレコードが作成されます。

どちらの方法でも、関連する列 (ip など) に一意の制約 (または主キー) が必要です。

もう 1 つの効果的な解決策は、次のステートメントを使用することです:

<code class="language-sql">INSERT OR IGNORE INTO visits VALUES ($ip, 0);
UPDATE visits SET hits = hits + 1 WHERE ip = $ip;</code>
ログイン後にコピー

この方法では、INSERT OR IGNORE ステートメントを使用して新しいレコードの挿入を試みます。 IGNORE 句は、レコードがすでに存在する場合にエラーが発生するのを防ぎます。後続の UPDATE ステートメントは、特定の IP アドレスのヒット列を増分しようとします。 UPDATE が成功した場合は、レコードが正常に更新されたことを意味します。失敗した場合は、レコードが存在せず、INSERT ステートメントによって作成されたことを意味します。 IP アドレスが正確に一致するように、LIKE= に変更されていることに注意してください。

以上がSQLite で MySQL の INSERT ON DUPLICATE KEY UPDATE をシミュレートする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート