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
Libérer: 2025-01-08 15:51:41
original
395 Les gens l'ont consulté

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>
Copier après la connexion
  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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal