Comment utiliser les index uniques dans MySQL et autres bases de données - SitePoint

Nous pouvons ajouter près de 17 millions de disques avant l'id est hors de portée.

Grand - sauf que les enregistrements 1 et 4 sont identiques. Et si nous voulons nous assurer que tous les numéros de téléphone sont uniques?







Les index uniques

Dans notre exemple, nous voulons nous assurer que pas deux enregistrements ont le même pays, la zone, le nombre et l'extension. Nous pouvons le faire en modifiant notre table:

Notez que « ix_phone du nom d'index est facultatif. Sinon, nous pourrions recréer notre table:

Essayons d'insérer un enregistrement en double, même si nous ne sommes pas spécifier un id:

L'erreur suivante sera générée si vous utilisez MySQL:

Si vous utilisez presque toute base de données, vous pouvez garantir vos enregistrements téléphoniques ne sont pas uniques quelle que soit la données est insérée.







MySQL NULLs

Je dis presque parce que toute base de données MySQL a une bizarrerie étrange. NULL est traitée comme une valeur unique - ce qui est la raison pour laquelle vous ne pouvez pas utiliser des comparaisons telles que la valeur = NULL et doivent utiliser la valeur IS NULL. Malheureusement, cela affecte également les index uniques et aucune logique a été mis en œuvre pour y remédier.

Nous pouvons exécuter ENCART d'origine à plusieurs reprises et un nouveau record sera créé à chaque fois que les paramètres par défaut du champ d'extension NULL et est considéré comme unique:

Oui, il est fou. Je ne suis pas au courant du problème dans d'autres bases de données et même MySQL fonctionne comme prévu si vous utilisez le moteur de BDB. Il a été rapporté comme un bogue MySQL, mais il n'y a pas de plans connus pour y remédier.

La solution: que tous les champs définis dans un index unique ne peut pas être mis à NULL. Dans cet exemple, nous pourrions indiquer qu'il n'y a pas de numéro d'extension en définissant une valeur telle que 0 ou 99999. Ou peut-être que nous pourrions rendre le champ un numéro signé et mis en -1. Il est horrible, mais ça va marcher.

En dépit de ce problème, les index uniques sont utiles dans de nombreuses situations et vous aider à conserver l'intégrité des données lorsque d'autres programmeurs et les utilisateurs ne sont pas si consciencieux!