Maison > base de données > tutoriel mysql > Comment puis-je insérer ou mettre à jour efficacement des lignes basées sur une clé composite dans MySQL ?

Comment puis-je insérer ou mettre à jour efficacement des lignes basées sur une clé composite dans MySQL ?

Patricia Arquette
Libérer: 2024-12-29 18:36:11
original
376 Les gens l'ont consulté

How Can I Efficiently Insert or Update Rows Based on a Composite Key in MySQL?

INSERT INTO ou UPDATE avec double condition

Considérons un tableau qui suit les données de plusieurs entités, identifiées par leur nom et leurs dates. Chaque jour, de nouvelles lignes sont générées avec des dates futures pour une liste finie de valeurs de nom. L'objectif est d'insérer une nouvelle ligne si elle n'existe pas, ou de mettre à jour la ligne existante si c'est le cas.

Une solution courante pourrait être une procédure stockée qui vérifie la condition, mais cela est irréalisable en raison de les données étant poussées depuis une autre langue.

Solution : INSÉRER SUR LA MISE À JOUR DE LA CLÉ EN DUPLICATE

La fonctionnalité MySQL INSERT ON DUPLICATE KEY UPDATE fournit une solution élégante à ce problème. Il permet d'insérer une nouvelle ligne si elle n'existe pas, ou de mettre à jour une ligne existante si elle existe, en fonction d'une clé ou d'un index unique.

Dans ce cas, une clé unique composite sur (nom, dates) suffiraient. Lorsqu'une insertion est tentée, MySQL détectera le conflit dû à cette clé unique et effectuera la mise à jour à la place.

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)
);

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 effectuant plusieurs insertions avec les mêmes valeurs (nom, dates), vous pouvez mettre à jour la colonne valeurs2 en conséquence :

INSERT INTO myThing (name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11')
ON DUPLICATE KEY UPDATE values2 = values2 + 1;

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

Résultat :

SELECT *
FROM myThing;

+----+------+---------+---------+------------+
| id | name | values1 | values2 | dates      |
+----+------+---------+---------+------------+
| 1  | 777  | 1       | 3       | 2015-07-11 |
+----+------+---------+---------+------------+
Copier après la connexion

Comme vous pouvez le voir, la clause INSERT ON DUPLICATE KEY UPDATE met effectivement à jour la colonne valeurs2 pour la ligne existante.

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