Optimisation des requêtes INSERT avec "ON DUPLICATE KEY UPDATE"
Le système de base de données MySQL fournit la clause "ON DUPLICATE KEY UPDATE" pour gérer les scénarios où une tentative d'insertion d'un enregistrement avec une clé primaire en double déclenche une opération de mise à jour. Cet article explique comment tirer parti de cette clause pour obtenir des mises à jour efficaces et concises.
INSERT standard avec spécification de champ complète
Lors de la tentative d'insertion d'un enregistrement avec une clé en double, vous pouvez recourir à la spécification de toutes les valeurs de champ dans la clause "ON DUPLICATE KEY UPDATE":
INSERT INTO table (id, a, b, c, d, e, f, g) VALUES (1, 2, 3, 4, 5, 6, 7, 8) ON DUPLICATE KEY UPDATE a=2, b=3, c=4, d=5, e=6, f=7, g=8;
Alors que cette approche garantit que tous les champs sont mis à jour correctement, cela nécessite une spécification redondante des valeurs déjà fournies dans l'insertion initiale.
Utilisation des valeurs de champ de l'instruction INSERT
Pour éviter la redondance , vous pouvez exploiter la syntaxe "VALUES()" dans la clause "ON DUPLICATE KEY UPDATE" :
INSERT INTO table (id, a, b, c, d, e, f, g) VALUES (1, 2, 3, 4, 5, 6, 7, 8) ON DUPLICATE KEY UPDATE a=VALUES(a), b=VALUES(b), c=VALUES(c), d=VALUES(d), e=VALUES(e), f=VALUES(f), g=VALUES(g);
Cette syntaxe fait référence aux valeurs d'origine de l'instruction insert, évitant ainsi d'avoir à les spécifier à nouveau.
Mises à jour redondantes et considérations LAST_INSERT_ID
Il est important de noter que si les valeurs de champ existantes correspondent aux nouveaux, MySQL n'effectuera aucune mise à jour. Par conséquent, il est essentiel de déterminer si tous les champs doivent réellement être spécifiés dans la clause "ON DUPLICATE KEY UPDATE".
De plus, la récupération de l'ID généré par LAST_INSERT_ID() peut nécessiter une manipulation supplémentaire, en fonction du backend spécifique. l'application ou le middleware que vous utilisez. Dans certains cas, vous devrez peut-être interroger la base de données séparément pour obtenir le dernier identifiant inséré.
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!