MySQL : ALTER IGNORE TABLE avec une contrainte unique
Dans MySQL, vous pouvez rencontrer un scénario dans lequel vous devez ajouter une contrainte unique sur un tableau existant. L'instruction ALTER TABLE propose l'option IGNORE qui peut potentiellement affecter la conservation des enregistrements en double.
Considérez l'exemple suivant :
ALTER IGNORE TABLE `my_table` ADD UNIQUE (`type`, `owner`);
Supposons que nous ayons une table my_table avec le schéma suivant :
ID (AUTO_INCREMENT PRIMARY KEY) type owner description
Disons que nous avons plusieurs enregistrements avec le même type et les mêmes valeurs de propriétaire, tels que :
| ID | type | owner | |---|---|---| | 1 | Apple | Apple CO | | 2 | Apple | Apple CO |
La question se pose : quel enregistrement restera après l'ajout de la contrainte unique à l'aide de ALTER IGNORE TABLE ?
Dans les versions MySQL antérieures à 5.7.4, la clause IGNORE conserverait le premier enregistrement qui satisfait à la contrainte unique, tout en supprimant le reste.
| ID | type | owner | |---|---|---| | 1 | Apple | Apple CO |
Cependant, il est important de noter que la clause IGNORE a depuis été supprimée à partir de MySQL 5.7.4 et que son utilisation entraîne désormais une erreur.
Par conséquent, dans les versions plus récentes de MySQL, vous devez éviter d'utiliser ALTER IGNORE TABLE avec des contraintes uniques. Envisagez plutôt d'utiliser l'alternative suivante :
ALTER TABLE `my_table` ADD UNIQUE (`type`, `owner`) USING BTREE;
Dans ce cas, s'il existe des enregistrements en double qui violent la contrainte d'unicité, une erreur sera générée et l'opération échouera. Cette approche garantit l'intégrité des données et empêche toute troncature ou suppression inattendue d'enregistrements.
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!