Maison >base de données >tutoriel mysql >Comment INSERT ... ON DUPLICATE KEY UPDATE de MySQL gère-t-il les opérations d'insertion ?
Opération Upsert efficace de MySQL : utilisez INSERT ... ON DUPLICATE KEY UPDATE
Dans la gestion de bases de données MySQL, il est souvent nécessaire d'insérer de nouvelles lignes ou de mettre à jour les lignes existantes selon que les données existent ou non. C'est ce qu'on appelle une opération "Upsert" (insertion ou mise à jour).
MySQL fournit la syntaxe INSERT ... ON DUPLICATE KEY UPDATE
pour implémenter efficacement la fonction Upsert. Voici comment cela fonctionne :
<code class="language-sql">INSERT INTO `table_name` (`column1`, `column2`, ...) VALUES (value1, value2, ...) ON DUPLICATE KEY UPDATE `column1` = value1_updated, `column2` = value2_updated, ...</code>La clause
INSERT
précise la valeur à insérer dans le tableau. La clause ON DUPLICATE KEY UPDATE
définit quoi faire lorsqu'une ligne avec la même clé primaire (ou index unique) existe déjà dans la table.
Par exemple, considérons le tableau suivant :
<code class="language-sql">CREATE TABLE `usage` ( `thing_id` INT NOT NULL PRIMARY KEY, `times_used` INT DEFAULT 0, `first_time_used` TIMESTAMP );</code>
Si vous souhaitez insérer de nouvelles données pour la ligne thing_id
pour 4815162342, incrémentez la colonne times_used
de 1 et définissez first_time_used
sur l'horodatage actuel, vous pouvez utiliser la requête Upsert suivante :
<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>
Si une ligne avec thing_id
pour 4815162342 existe déjà, la requête mettra à jour la colonne times_used
tandis que first_time_used
reste inchangé. Sinon, une nouvelle ligne sera insérée.
INSERT ... ON DUPLICATE KEY UPDATE
est une technologie flexible et efficace pour effectuer des opérations Upsert dans MySQL. Il vous permet d'effectuer des opérations d'insertion et de mise à jour à l'aide d'une seule requête, simplifiant ainsi votre code et améliorant les performances.
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!