Mise à jour conditionnelle dans INSERT ... ON DUPLICATE KEY UPDATE
Dans MySQL, la syntaxe INSERT ... ON DUPLICATE KEY UPDATE permet mise à jour automatique des données de la table lorsqu'une clé en double est rencontrée lors d'une opération d'insertion. Cependant, la partie UPDATE de la requête ne prend pas en charge l'utilisation d'une clause WHERE pour spécifier des mises à jour conditionnelles.
Solution de contournement utilisant IF()
Pour surmonter cette limitation, on peut utiliser la fonction IF() pour implémenter des mises à jour conditionnelles dans la clause ON DUPLICATE KEY UPDATE. La fonction IF() évalue une condition et renvoie une valeur différente en fonction du résultat.
Par exemple, considérons l'instruction INSERT ... ON DUPLICATE KEY UPDATE 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 instruction, la fonction IF() vérifie si la valeur de la colonne last_event_created_at dans la table de base de données est inférieure à la valeur en cours d'insertion (VALUES(last_event_created_at)). Si c'est vrai, il met à jour la colonne last_event_id avec la nouvelle valeur de l'instruction insert. Sinon, la valeur existante reste inchangée.
Cette solution de contournement permet des mises à jour conditionnelles dans les instructions INSERT ... ON DUPLICATE KEY UPDATE sans recourir à des combinaisons de requêtes INSERT/UPDATE/SELECT, qui peuvent ne pas convenir à la réplication. scénarios.
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!