Maison >base de données >tutoriel mysql >MySQL peut-il insérer des lignes sans erreurs en cas de conflits de clés uniques ?
Insertion de lignes sans duplication : comprendre "INSÉRER... SUR LA CLÉ EN DUPLICATE (ne rien faire)"
Question :
MySQL peut-il effectuer une opération d'insertion sans générer d'erreur en cas de conflit de clé unique se produit ?
Plus précisément, existe-t-il un moyen d'utiliser l'instruction INSERT pour insérer une ligne dans une table uniquement si la clé primaire n'existe pas déjà ?
Réponse :
MySQL propose deux méthodes pour gérer les conflits de clés en double lors d'une opération INSERT :
1. INSERT ... ON DUPLICATE KEY UPDATE
Cette syntaxe vous permet de spécifier une action supplémentaire à entreprendre si l'opération d'insertion entraînerait une violation de clé en double. Par exemple, vous pouvez mettre à jour une ligne existante avec les valeurs de la nouvelle ligne.
Cependant, il n'y a pas d'option spécifique "DO NOTHING" avec la clause ON DUPLICATE KEY UPDATE.
2. INSERT ... ON DUPLICATE KEY UPDATE>
Comme alternative, vous pouvez utiliser cette syntaxe pour ignorer essentiellement le conflit de clé en double. Dans ce cas, la colonne id est attribuée à elle-même, ce qui ne déclenche aucune mise à jour.
3. INSERT IGNORE
Si vous n'avez pas besoin d'une gestion stricte des erreurs et que vous n'êtes pas préoccupé par les problèmes potentiels liés aux champs d'incrémentation automatique ou aux contraintes de clé étrangère, vous pouvez utiliser l'instruction INSERT IGNORE. Cette syntaxe ignore l'opération d'insertion si une clé en double est rencontrée.
Exemple :
Considérez la table user_permanent_gift mentionnée dans la question. Pour insérer une ligne dans ce tableau sans générer d'erreur en cas de clés en double, vous pouvez utiliser l'instruction suivante :
INSERT IGNORE INTO user_permanent_gift (fb_user_id, gift_id, purchase_timestamp) VALUES (123, 456, '2022-03-15 12:00:00');
Cette instruction tentera d'insérer la ligne, mais si la combinaison de fb_user_id et gift_id existe déjà dans le tableau, l'insertion sera ignorée sans générer d'erreur.
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!