Maison >base de données >tutoriel mysql >Comment INSERT ... ON DUPLICATE KEY UPDATE de MySQL peut-il gérer efficacement les insertions et les mises à jour ?

Comment INSERT ... ON DUPLICATE KEY UPDATE de MySQL peut-il gérer efficacement les insertions et les mises à jour ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-21 11:57:091027parcourir

How Can MySQL's INSERT ... ON DUPLICATE KEY UPDATE Efficiently Handle Inserts and Updates?

Upsert efficace de MySQL : INSÉRER... SUR LA MISE À JOUR DE LA CLÉ EN DOUBLE

MySQL est fréquemment confronté à des scénarios nécessitant soit l'insertion d'une nouvelle ligne, soit la mise à jour d'une ligne existante en fonction de la présence d'une clé. Cette opération combinée, connue sous le nom d'upsert (ou de fusion), est gérée avec élégance dans MySQL à l'aide d'une seule instruction.

Tirer parti de INSERT... SUR LA MISE À JOUR DE CLÉ EN DOUBLE

Au lieu de plusieurs requêtes, l'instruction INSERT ... ON DUPLICATE KEY UPDATE de MySQL rationalise ce processus. Sa syntaxe est simple :

<code class="language-sql">INSERT INTO `table_name`
(`column1`, `column2`, ...)
VALUES
(`value1`, `value2`, ...)
ON DUPLICATE KEY UPDATE
`column1` = `value1`,
`column2` = `value2`,
...</code>

Application pratique : incrémenter le nombre d'utilisations

Imaginez un tableau usage avec les colonnes thing_id, times_used et first_time_used. Le but est d'augmenter times_used pour un thing_id donné si la ligne existe ; sinon, insérez une nouvelle ligne.

Cette tâche est facilement accomplie en utilisant INSERT ... ON DUPLICATE KEY UPDATE :

<code class="language-sql">INSERT INTO `usage`
(`thing_id`, `times_used`, `first_time_used`)
VALUES
(4815162342, 1, NOW())
ON DUPLICATE KEY UPDATE
`times_used` = `times_used` + 1</code>

Cette requête gère intelligemment les deux scénarios : si thing_id 4815162342 existe, times_used est incrémenté ; sinon, une nouvelle ligne est ajoutée avec les valeurs spécifiées. Cela démontre l'efficacité et la concision de la fonctionnalité d'insertion de MySQL.

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