Maison >base de données >tutoriel mysql >Comment MySQL gère-t-il la syntaxe INSERT ... SELECT ... ON DUPLICATE KEY UPDATE ?

Comment MySQL gère-t-il la syntaxe INSERT ... SELECT ... ON DUPLICATE KEY UPDATE ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-06 06:59:11653parcourir

How Does MySQL Handle INSERT ... SELECT ... ON DUPLICATE KEY UPDATE Syntax?

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 :

  • exp_id
  • created_by
  • location
  • animal
  • starttime
  • endtime

Les colonnes nommées dans la clause SELECT seront utilisées pour spécifier la mise à jour valeurs :

  • 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.lar dur
  • t.lardist
  • t.emptyct
  • t.emptydur

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!

Déclaration:
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