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!