Maison > base de données > tutoriel mysql > le corps du texte

Qu'arrive-t-il aux enregistrements en double lors de l'ajout d'une contrainte UNIQUE dans MySQL ?

Linda Hamilton
Libérer: 2024-11-03 08:00:30
original
918 Les gens l'ont consulté

What Happens to Duplicate Records When Adding a UNIQUE Constraint in MySQL?

Détermination de l'impact de ALTER IGNORE TABLE ADD UNIQUE sur les enregistrements en double

Lorsque vous tentez d'ajouter une contrainte UNIQUE sur plusieurs colonnes à une table, il est inévitable de rencontrer des enregistrements en double qui violent cette contrainte. Dans les versions antérieures de MySQL, la clause IGNORE de l'instruction ALTER TABLE jouait un rôle crucial dans la gestion de ces doublons.

MySQL 5.7.4 et au-delà : clause IGNORE supprimée

Cependant, depuis MySQL 5.7.4, la clause IGNORE est obsolète et son utilisation entraîne désormais une erreur. Par conséquent, l'ancien comportement décrit ci-dessous n'est plus applicable.

Comportement dans les anciennes versions de MySQL

Pour les anciennes versions de MySQL qui prennent en charge la clause IGNORE, le comportement suivant se produit lorsque ajout d'une contrainte UNIQUE :

  • La première ligne est conservée : Seule la première ligne parmi celles avec des valeurs en double sur les colonnes nouvellement uniques sera conservée.
  • Les autres lignes en double sont supprimées : Les lignes restantes avec des valeurs en double seront automatiquement supprimées.
  • Troncation des valeurs incorrectes : Toutes les valeurs qui violent les autres les contraintes sont tronquées ou modifiées pour correspondre à des limites acceptables.

Dans l'exemple fourni, où une contrainte UNIQUE est ajoutée (type, propriétaire) à une table contenant des enregistrements en double avec type = 'Apple' et propriétaire = 'Apple CO', l'enregistrement avec le ID le plus petit serait celui conservé. Les autres enregistrements ayant les mêmes valeurs seraient supprimés.

Cependant, il est important de noter que ce comportement est spécifique aux versions MySQL antérieures à 5.7.4. Dans les versions MySQL modernes, la clause IGNORE n'est plus prise en charge et tous les enregistrements en conflit entraîneront l'échec de l'opération ALTER TABLE.

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