INSERT ... ON DUPLICATE KEY UPDATE: 条件付き更新
INSERT ... ON DUPLICATE KEY UPDATE 操作を実行すると、特定の条件に基づいて条件付きで更新を実行するために必要な場合があります。ただし、このステートメントの UPDATE 部分では WHERE 句を使用できません。
IF() を使用した回避策
条件付き更新を実現するには、解決策の 1 つは、 IF()関数。 IF() 式内の条件を評価することにより、結果に基づいて更新された列に異なる値を指定できます。
例
次の表を考えてみましょう。
CREATE TABLE daily_events ( created_on DATE, last_event_id INT, last_event_created_at DATETIME );
last_event_created_at 列が変更された場合にのみ last_event_id 列を条件付きで更新するには、次のクエリを使用できます。
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);
このクエリでは、IF() 関数は次のことを確認します。データベース内の last_event_created_at の値が、挿入される値より小さいです。 true の場合、last_event_id は挿入された値に更新されます。それ以外の場合は、既存の値が保持されます。
レプリケーションの互換性
このアプローチには追加のクエリやデータベース スキーマの変更が含まれないため、レプリケーションと互換性があります。
以上がINSERT ... ON DUPLICATE KEY UPDATE ステートメントで条件付き更新を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。