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 ?
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!