Maison > base de données > tutoriel mysql > Comment puis-je mettre à jour efficacement les enregistrements existants tout en en insérant de nouveaux à l'aide de « INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE » de MySQL ?

Comment puis-je mettre à jour efficacement les enregistrements existants tout en en insérant de nouveaux à l'aide de « INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE » de MySQL ?

Susan Sarandon
Libérer: 2024-12-01 03:42:10
original
720 Les gens l'ont consulté

How Can I Efficiently Update Existing Records While Inserting New Ones Using MySQL's `INSERT INTO ... SELECT ... ON DUPLICATE KEY UPDATE`?

Utilisation de "INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE" pour mettre à jour les enregistrements existants

Lors de l'insertion de données dans une table où certaines colonnes peuvent déjà existent, vous souhaiterez peut-être mettre à jour ces colonnes avec de nouvelles valeurs. MySQL fournit une syntaxe pratique pour de tels scénarios en utilisant la clause "ON DUPLICATE KEY UPDATE".

Dans votre requête, vous avez une instruction "INSERT INTO" suivie d'une instruction "SELECT". Le but est d'insérer de nouvelles lignes dans la table "lee" et de mettre à jour les lignes existantes qui correspondent à une clé unique. Pour ce faire, vous devez spécifier les colonnes à mettre à jour dans la clause "ON DUPLICATE KEY UPDATE".

MySQL interprète la partie avant le signe égal (=) comme faisant référence aux colonnes nommées dans le champ "INSERT INTO". "clause. La partie après le signe égal fait référence aux colonnes de la clause "SELECT".

Par exemple :

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, ...
Copier après la connexion

Dans cette requête, les colonnes de la clause "INSERT INTO" qui sont non mis à jour sont "exp_id", "created_by", "location", "animal", "starttime" et "endtime". Toutes les autres colonnes, telles que "entct", "inact", "inadur", "inadist", etc., sont mises à jour avec les valeurs de la clause "SELECT".

En utilisant la syntaxe appropriée, vous pouvez effectuez des insertions et des mises à jour en une seule requête, garantissant ainsi que vos données sont maintenues à jour efficacement.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal