Maison >base de données >tutoriel mysql >Comment puis-je insérer ou mettre à jour efficacement des données en fonction de deux conditions dans SQL ?

Comment puis-je insérer ou mettre à jour efficacement des données en fonction de deux conditions dans SQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-04 12:06:35572parcourir

How Can I Efficiently Insert or Update Data Based on Two Conditions in SQL?

Insérer ou mettre à jour avec deux conditions

Ce problème semble simple ; cependant, cela nécessite de trouver une solution efficace dans les délais. Considérons un tableau avec le schéma suivant :

ID INTEGER PRIMARY KEY AUTOINCREMENT
name INTEGER
values1 INTEGER
values2 INTEGER
dates DATE

Chaque jour, des données sont ajoutées à ce tableau, ce qui entraîne de nouvelles lignes avec des dates futures. Les données de la colonne « nom » sont tirées d'un ensemble fini. Le comportement souhaité est d'insérer une nouvelle ligne si de nouvelles données sont disponibles et de mettre à jour la ligne existante si une ligne avec le « nom » et les « dates » correspondants existe déjà.

Solution :

La méthode appropriée pour cette situation est l'instruction "INSERT INTO ... ON DUPLICATE KEY UPDATE". Cette instruction vous permet à la fois d'insérer de nouvelles lignes et de mettre à jour les lignes existantes répondant à des conditions spécifiques. Dans votre cas, les conditions correspondent à 'nom' et 'dates'.

Pour utiliser cette méthode, votre table doit avoir une clé unique (qui peut être une clé composite) pour détecter la collision lors de l'insertion. Cette clé unique peut être la clé primaire ou une clé composite comme celle-ci :

UNIQUE KEY(name, dates)

Si une ligne avec le même « nom » et la même « date » existe déjà, l'opération d'insertion est détectée comme un conflit, et l'action de mise à jour spécifiée dans la clause "ON DUPLICATE KEY UPDATE" est effectuée.

Terminé Exemple :

CREATE TABLE myThing (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name INT NOT NULL,
    values1 INT NOT NULL,
    values2 INT NOT NULL,
    dates DATE NOT NULL,
    UNIQUE KEY(name, dates)  -- This line is crucial
);

-- Insert a new row or update if a row with the same 'name' and 'date' exists
INSERT INTO myThing(name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2=values2+1;

En utilisant l'instruction "INSERT INTO ... ON DUPLICATE KEY UPDATE", vous pouvez efficacement insérer de nouvelles lignes ou mettre à jour des lignes existantes en fonction du caractère unique de la clé spécifiée.

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