Maison >base de données >tutoriel mysql >Comment MySQL gère-t-il la syntaxe INSERT ... SELECT ... ON DUPLICATE KEY UPDATE ?
INSERT ... SELECT ... ON DUPLICATE KEY UPDATE Clarification de la syntaxe
Lors de l'exécution d'une requête INSERT où certaines colonnes peuvent déjà exister dans la table cible, une clause ON DUPLICATE KEY UPDATE peut être utilisée. Cette clause vous permet de spécifier les critères de mise à jour et les valeurs à mettre à jour.
La syntaxe de la clause UPDATE dans une telle requête est la suivante :
ON DUPLICATE KEY UPDATE column1=value1, column2=value2, ...;
L'aspect clé à comprendre est comment MySQL référence les valeurs insérées et mises à jour. Par défaut, la partie avant le signe égal fait référence aux colonnes nommées dans la clause INSERT INTO, tandis que la partie après le signe égal fait référence aux colonnes nommées dans la clause SELECT.
Par exemple, considérons la requête suivante :
INSERT INTO lee(exp_id, created_by, location, animal, starttime, endtime, entct, inact, inadur, inadist, smlct, smldur, smldist, larct, lardur, lardist, emptyct, emptydur) SELECT id, uid, t.location, t.animal, t.starttime, t.endtime, t.entct, t.inact, t.inadur, t.inadist, t.smlct, t.smldur, t.smldist, t.larct, t.lardur, t.lardist, t.emptyct, t.emptydur FROM tmp t WHERE uid=x ON DUPLICATE KEY UPDATE entct=t.entct, inact=t.inact, ...;
Dans cette requête, les colonnes nommées dans la clause INSERT INTO seront utilisées pour l'affectation des colonnes par par défaut :
Les colonnes nommées dans la clause SELECT seront utilisées pour spécifier la mise à jour valeurs :
Colonnes qui ne sont pas inclus dans la clause ON DUPLICATE KEY UPDATE ne seront pas mis à jour.
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!