Maison >base de données >tutoriel mysql >MySQL peut-il mettre à jour plusieurs lignes dans une seule requête ?

MySQL peut-il mettre à jour plusieurs lignes dans une seule requête ?

DDD
DDDoriginal
2025-01-21 20:21:10455parcourir

Can MySQL Update Multiple Rows in a Single Query?

Mise à jour des lignes par lots MySQL

L'instruction INSERT de MySQL permet d'insérer simultanément plusieurs lignes de données. Mais puis-je mettre à jour plusieurs lignes avec une seule requête ?

Requête de mise à jour par lots

Oui, vous pouvez utiliser l'instruction INSERT ... ON DUPLICATE KEY UPDATE pour mettre à jour plusieurs lignes à la fois. Lorsqu'une ligne est insérée dans une table et qu'une clé primaire ou unique existe déjà, ce qui suit se produit :

  • Si l'instruction INSERT contient une clause DUPLICATE KEY UPDATE, alors la ligne existante est mise à jour en utilisant la valeur fournie dans la clause de mise à jour.
  • Si l'instruction INSERT ne contient pas de clause DUPLICATE KEY UPDATE, une erreur est générée.

Exemple

Considérez la forme suivante :

Name id Col1 Col2
Row1 1 6 1
Row2 2 2 3
Row3 3 9 5
Row4 4 16 8

Nous souhaitons combiner les mises à jour suivantes en une seule requête :

<code class="language-sql">UPDATE table SET Col1 = 1 WHERE id = 1;
UPDATE table SET Col1 = 2 WHERE id = 2;
UPDATE table SET Col2 = 3 WHERE id = 3;
UPDATE table SET Col1 = 10 WHERE id = 4;
UPDATE table SET Col2 = 12 WHERE id = 4;</code>

La requête de mise à jour par lots correspondante utilisant INSERT ... ON DUPLICATE KEY UPDATE est la suivante :

<code class="language-sql">INSERT INTO table (id,Col1,Col2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12)
ON DUPLICATE KEY UPDATE Col1=VALUES(Col1),Col2=VALUES(Col2);</code>

Cette requête insère une nouvelle ligne si elle n'existe pas déjà, ou met à jour une ligne existante si la clé primaire existe déjà dans la table.

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