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;
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;
Résultat :
SELECT * FROM myThing; +----+------+---------+---------+------------+ | id | name | values1 | values2 | dates | +----+------+---------+---------+------------+ | 1 | 777 | 1 | 3 | 2015-07-11 | +----+------+---------+---------+------------+
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!