Utiliser efficacement « ON DUPLICATE KEY UPDATE »
Lors de l'exécution d'opérations de base de données, il est courant de rencontrer des scénarios de clés en double. Dans de tels cas, vous souhaiterez peut-être insérer une nouvelle ligne ou mettre à jour une ligne existante avec la même clé. Cet article explore l'utilisation de la clause "ON DUPLICATE KEY UPDATE" dans MySQL pour gérer les clés en double.
Le problème
Considérez la requête MySQL suivante :
INSERT INTO table (id, a, b, c, d, e, f, g) VALUES (1, 2, 3, 4, 5, 6, 7, 8)
L'identifiant du champ a un index unique, ce qui signifie qu'il ne peut pas y avoir de valeurs d'identifiant en double. Si une ligne avec le même identifiant existe déjà dans la base de données, vous souhaitez la mettre à jour au lieu d'insérer une nouvelle ligne. Cependant, re-spécifier toutes les valeurs de champ dans la cause "ON DUPLICATE KEY UPDATE" peut être inefficace et répétitif.
Solutions possibles
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
Cependant, cette méthode n'est pas recommandée car elle peut être fastidieuse et sujette aux erreurs, en particulier pour les tables comportant de nombreuses colonnes.
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 met à jour uniquement les colonnes spécifiées 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=a, b=b, c=c, d=d, e=e, f=f, g=g;
Récupération du dernier identifiant inséré
La fonction LAST_INSERT_ID() peut être utilisé pour récupérer l’ID de la dernière ligne insérée. La méthode d'utilisation de cette fonction peut varier en fonction de l'application backend que vous utilisez. Par exemple, dans LuaSQL, la méthode conn:getlastautoid() récupère la valeur.
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!