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
Libérer: 2025-01-04 12:06:35
original
578 Les gens l'ont consulté

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
Copier après la connexion

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)
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal