Maison  >  Article  >  base de données  >  Comment effectuer des mises à jour conditionnelles dans les instructions INSERT ... ON DUPLICATE KEY UPDATE ?

Comment effectuer des mises à jour conditionnelles dans les instructions INSERT ... ON DUPLICATE KEY UPDATE ?

DDD
DDDoriginal
2024-10-30 22:46:29350parcourir

How to Perform Conditional Updates in INSERT ... ON DUPLICATE KEY UPDATE Statements?

INSÉRER... SUR MISE À JOUR DE CLÉ EN DOUBLE : Mises à jour conditionnelles

Lors de l'exécution d'une opération INSÉRER... SUR MISE À JOUR DE CLÉ EN DUPLICATE, il est il est parfois nécessaire d'exécuter la mise à jour de manière conditionnelle en fonction de conditions spécifiques. Cependant, la clause WHERE n'est pas autorisée avec la partie UPDATE de cette instruction.

Solution de contournement utilisant IF()

Pour réaliser des mises à jour conditionnelles, une solution consiste à utiliser la Fonction SI(). En évaluant une condition dans l'expression IF(), vous pouvez spécifier une valeur différente pour la colonne mise à jour en fonction du résultat.

Exemple

Considérez le tableau suivant :

CREATE TABLE daily_events (
  created_on DATE,
  last_event_id INT,
  last_event_created_at DATETIME
);

Pour mettre à jour conditionnellement la colonne last_event_id uniquement si la colonne last_event_created_at a changé, vous pouvez utiliser la requête suivante :

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);

Dans cette requête, la fonction IF() vérifie si la valeur de last_event_created_at dans la base de données est inférieure à la valeur en cours d'insertion. Si c'est vrai, le last_event_id est mis à jour avec la valeur insérée ; sinon, la valeur existante est conservée.

Compatibilité de réplication

Cette approche est compatible avec la réplication, car elle n'implique aucune requête ou modification supplémentaire du schéma de la base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn