ホームページ >データベース >mysql チュートリアル >SQL で INSERT ... ON DUPLICATE KEY を使用して条件付き更新を実装する方法は?

SQL で INSERT ... ON DUPLICATE KEY を使用して条件付き更新を実装する方法は?

DDD
DDDオリジナル
2024-11-01 06:31:301011ブラウズ

How to Implement Conditional Updates with INSERT ... ON DUPLICATE KEY in SQL?

INSERT ... ON DUPLICATE KEY の条件付き更新

重複キー条件に基づいてレコードを挿入または更新することは、データベース プログラミングの一般的なシナリオです。 。ただし、更新条件をさらに制限して、追加の基準に依存させる必要がある場合があります。残念ながら、INSERT ... ON DUPLICATE KEY UPDATE 構文は、条件付き更新の WHERE 句をネイティブにサポートしていません。

制限の克服

この制限を回避するには、次のようにします。 UPDATE 句内で IF() 関数を利用できます。 IF() 関数を使用すると、指定された論理式に基づいて代替値を指定できます。

実装例

次の INSERT ... ON DUPLICATE KEY UPDATE を考えてみましょう。 query:

INSERT INTO daily_events (created_on, last_event_id, last_event_created_at)
VALUES ('2010-01-19', 23, '2010-01-19 10:23:11')
ON DUPLICATE KEY UPDATE
  last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id);

このクエリでは、UPDATE 句に、既存の last_event_created_at 値が挿入される値より小さいかどうかを確認する IF() ステートメントが含まれています。既存の値が古い場合は、更新が実行され、last_event_id が新しい値に置き換えられます。それ以外の場合は、既存の last_event_id が保持されます。

追加の考慮事項

  • 条件が false の場合、IF() は NULL と評価されることに注意してください。したがって、条件が満たされない場合、last_event_id の更新された値も NULL になります。
  • 更新に必要なフィルタリングを確実に行うには、追加の WHERE 句または個別の UPDATE クエリを使用することを検討してください。

以上がSQL で INSERT ... ON DUPLICATE KEY を使用して条件付き更新を実装する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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