Maison >base de données >tutoriel mysql >Comment insérer ou mettre à jour efficacement des enregistrements dans MySQL en utilisant IF EXISTS UPDATE ELSE INSERT INTO ?

Comment insérer ou mettre à jour efficacement des enregistrements dans MySQL en utilisant IF EXISTS UPDATE ELSE INSERT INTO ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-08 15:51:41393parcourir

How to Efficiently Insert or Update Records in MySQL Using IF EXISTS UPDATE ELSE INSERT INTO?

MySQL insère ou met à jour efficacement les enregistrements : IF EXISTS UPDATE ELSE INSERT INTO

SQL propose plusieurs méthodes pour insérer ou mettre à jour des enregistrements dans une table de base de données en fonction de l'existence d'une clé unique. Ce guide explique pourquoi ce que vous avez essayé ne fonctionne pas et propose deux solutions testées à l'aide de l'instruction INSERT ... ON DUPLICATE KEY UPDATE de MySQL.

Pourquoi votre tentative a échoué

  • Contrainte unique manquante : Votre requête tente d'utiliser ON DUPLICATE KEY UPDATE, mais il manque une contrainte unique dans votre colonne subs_email, ce qui entraîne l'échec de la requête.
  • Erreur de syntaxe : Les blocs IF EXISTS et BEGIN/END que vous essayez d'utiliser ne sont pas une syntaxe SQL valide pour MySQL.

Solution 1 : Créez une contrainte unique et utilisez INSERT ... ON DUPLICATE KEY UPDATE

  1. Assurez-vous qu'il y a une contrainte unique sur la colonne subs_email :
<code class="language-sql">ALTER TABLE subs ADD UNIQUE (subs_email);</code>
  1. Utilisez la requête suivante :
<code class="language-sql">INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
  subs_name     = VALUES(subs_name),
  subs_birthday = VALUES(subs_birthday);</code>

Solution 2 : Instruction préparée paramétrée à l'aide de ON DUPLICATE KEY UPDATE

  1. Préparez et exécutez des instructions à l'aide d'espaces réservés pour les paramètres :
<code class="language-java">String sql = "INSERT INTO subs (subs_name, subs_email, subs_birthday) VALUES (?, ?, ?)"
                    + " ON DUPLICATE KEY UPDATE subs_name = ?, subs_birthday = ?";

PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, name);
preparedStatement.setString(2, email);
preparedStatement.setString(3, birthday);
preparedStatement.setString(4, name); // 重复键更新的第二个参数
preparedStatement.setString(5, birthday); // 重复键更新的第三个参数
preparedStatement.executeUpdate();</code>

N'oubliez pas d'utiliser des espaces réservés pour les paramètres pour empêcher les attaques par injection SQL.

En appliquant ces solutions, vous pouvez insérer ou mettre à jour efficacement des enregistrements dans les tables de base de données en fonction du caractère unique des subs_email colonnes.

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