Maison >base de données >tutoriel mysql >Comment puis-je utiliser la MISE À JOUR DE CLÉ EN DUPLICATE de MySQL pour les insertions et mises à jour de plusieurs lignes ?
ON DUPLICATE KEY UPDATE
La clause ON DUPLICATE KEY UPDATE
de MySQL fournit une méthode simplifiée pour effectuer des opérations d'insertion et de mise à jour sur plusieurs lignes au sein d'une seule requête. Ceci est particulièrement utile lorsqu'il s'agit de clés uniques, pour éviter les erreurs et garantir la cohérence des données.
Scénario :
Envisagez un scénario dans lequel vous devez insérer plusieurs lignes dans un tableau, mais certaines lignes peuvent déjà exister en raison de valeurs de clé uniques en double. Au lieu de générer des erreurs, vous souhaitez mettre à jour les lignes existantes avec les nouvelles données.
Exemple :
Disons que vous disposez de l'instruction SQL suivante conçue pour insérer plusieurs lignes dans une table nommée beautiful
:
<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29);</code>
Si name
est une clé unique et que certains noms existent déjà, cette requête échouera. Pour gérer cela, nous utilisons ON DUPLICATE KEY UPDATE
.
Solution :
Ajoutez la clause ON DUPLICATE KEY UPDATE
à votre déclaration INSERT
:
<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) ON DUPLICATE KEY UPDATE age = VALUES(age);</code>
Cette requête modifiée insérera de nouvelles lignes où le name
est unique. Si un name
en double est rencontré, seule la colonne age
sera mise à jour avec la valeur fournie dans la clause VALUES
.
Syntaxe moderne (MySQL 8.0.19 et versions ultérieures) :
MySQL 8.0.19 et versions ultérieures offrent une approche plus lisible utilisant des alias :
<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) AS new ON DUPLICATE KEY UPDATE age = new.age;</code>
Ici, AS new
attribue un alias à la nouvelle ligne, vous permettant de référencer clairement ses champs (par exemple, new.age
).
Ancienne syntaxe (versions MySQL antérieures à 8.0.19) :
Pour les anciennes versions de MySQL, le mot-clé VALUES
est utilisé pour faire référence aux valeurs insérées :
<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) ON DUPLICATE KEY UPDATE age = VALUES(age);</code>
En utilisant ON DUPLICATE KEY UPDATE
, vous pouvez gérer efficacement les insertions et les mises à jour au sein d'une seule instruction SQL, simplifiant ainsi votre code et améliorant les performances de la base de données.
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!