Les valeurs de chaque colonne de la clé primaire doivent être uniques et ne peuvent jamais être NULL.
En fait, la contrainte clé primaire force implicitement la contrainte NOT NULL sur chaque colonne composant la clé primaire.
Si vous essayer d'insérer une valeur NULL à une colonne composant la clé primaire, vous obtiendrez une erreur.
Cela fait la différence entre une clé primaire et la contrainte d'unicité et l'indexe unique.
Voir les détails des différences entre la contrainte d'unicité et l'index unique dans la page
UNIQUE.
Notes :
Une clé primaire peut être remplacée, s'il y en a vraiment un besoin, par la création d'un indexe unique et/ou une contrainte UNIQUE sur les colonnes de la clé primaire et en ajoutant des contraintes NOT NULL sur ces colonnes.
-
Clé primaire
-
Exemple 1 :
Résultat de la requête :
-
Exemple 2 :
Résultat de la requête :
-
Exemple 3 :
Résultat de la requête :
-
Indexe unique
-
Exemple 1 :
Résultat de la requête :
-
Exemple 2 :
Résultat de la requête :
-
Exemple 3 :
Résultat de la requête :
Pour ce dernier exemple, les deux insertions se sont effectuées sans aucune erreur.
Il est important de retenir qu'un indexe conventionnel (B*Tree) n'insère pas d'entrées pour les valeurs NULL.
La valeur des deux colonnes qui composent l'indexe est NULL
et donc les deux lignes insérées n'ont été pas indexées.