Quelle est la différence entre une clé primaire et une contrainte unique?
Quelqu'un m'a posé cette question sur un entretien...
- et vous n'étiez pas en mesure d'y répondre? ce qu'est un perdant! moi non plus.
- double possible de UNIQUE et CLÉ PRIMAIRE
Vous devez vous connecter pour publier un commentaire.
Une clé primaire est un champ unique sur une table, mais il est spécial dans le sens que la table considère cette ligne comme sa clé. Cela signifie que les autres tables peuvent utiliser ce champ pour créer des relations de clé étrangère pour eux-mêmes.
Une contrainte unique signifie simplement qu'un champ doit être unique.
Clés primaires ne peuvent pas être null. Unique clés.
TL;DR Beaucoup peuvent être implicites par
PRIMARY KEY
(l'unicité, de la référence de mesure non-nulle-ness, le clustering, etc), mais rien qui ne peut être précisé de manière explicite à l'aide deUNIQUE
.Je suggère que si vous êtes le genre de codeur qui aime la commodité de
SELECT * FROM...
sans avoir à énumérer tous ces satanés colonnes, alorsPRIMARY KEY
est juste la chose pour vous.Qu'Est ce qu'une Clé? par Hugh Darwen
SQL et la Théorie Relationnelle: Comment Écrire le Précise le Code SQL
Par C. J. Date
Dans le standard SQL
PRIMARY KEY
UNIQUE
).NOT NULL
mais vous pouvez spécifier explicitement lors de la création de colonnes (mais vous devriez éviter les valeurs null de toute façon!)FOREIGN KEY
mais vous pouvez les spécifier de façon explicite.Dans certains produits
PRIMARY KEY
implique la table d'index cluster, mais vous pouvez spécifier explicitement (vous ne voulez pas la clé primaire à l'index cluster!)Pour certaines personnes
PRIMARY KEY
a purement signification psychologique:Chaque clé primaire est une contrainte unique, mais en plus de la PK, une table peut avoir d'autres contraintes uniques.
Dire que vous avez une table Employés, PK Employé. Vous pouvez ajouter une contrainte unique sur le SSN, par exemple.
Unique contraintes de Clé:
Il permettra à la valeur null dans la colonne.
ALTER TABLE nom_table
AJOUTER CONTRAINTE UNIQUE_CONSTRAINT
UNIQUE (column_name1, column_name2, ...)
Clé Primaire:
Il n'autoriser les valeurs null.
ALTER TABLE nom_table
AJOUTER CONTRAINTE KEY_CONSTRAINT
CLÉ PRIMAIRE (nom_colonne)
UNIQUE
contrainte peut être soit une simple clé ou une clé composée (simple = une colonne, composé = plusieurs colonnes) c'est à dire pas différent dePRIMARY KEY
à cet égard.En plus de Andrew réponse, vous ne pouvez avoir qu'une seule clé primaire par table, mais vous pouvez avoir de nombreuses contraintes.
Une clé primaire est un ensemble minimal de colonnes, de sorte que toute les deux enregistrements avec des valeurs identiques dans ces colonnes ont des valeurs identiques dans toutes les colonnes. Notez qu'une clé primaire peut être composée de plusieurs colonnes.
Une contrainte d'unicité est exactement ce que cela ressemble.
La contrainte UNIQUE identifie de manière unique chaque enregistrement dans une table de base de données.
L'UNIQUE et des contraintes de CLÉ PRIMAIRE à la fois de fournir une garantie pour l'unicité d'une colonne ou un ensemble de colonnes.
Une contrainte de CLÉ PRIMAIRE a automatiquement un UNIQUE contrainte définie sur elle.
Notez que vous pouvez avoir beaucoup de contraintes UNIQUES par table, mais seulement une contrainte de CLÉ PRIMAIRE par table
Clé primaire ne peut pas être nulle, mais la contrainte unique est nullable.
lorsque vous choisissez une clé primaire pour votre table, c'est plein de l'Indice de ce champ.
Les clés primaires sont essentiellement une combinaison de (unique +not null). aussi, quand le référencement d'une clé étrangère sgbd qui nécessite la clé Primaire.
Clé Unique seulement impose l'unicité de la colonne.Une valeur de champ peut être NULLE dans le cas de uniqe clé. Aussi, il ne peut pas être utilisé pour faire référence à une clé étrangère, qui est tout à fait évident que u peut avoir des valeurs nulles dans les il
À la fois garantir l'unicité à travers les lignes de la table, à l'exception de la valeur null comme mentionné dans les autres réponses.
En outre, une clé primaire "vient" avec un index, ce qui pourrait être regroupés ou non en cluster.
Il y a plusieurs bonnes réponses ici jusqu'à présent. Outre le fait qu'une clé primaire ne peut pas être nulle, est une contrainte unique lui-même, et peut être composée de plusieurs colonnes, il y a une signification plus profonde qui dépendent du serveur de base de données que vous utilisez.
Je suis un utilisateur de SQL Server, donc une clé primaire a un sens plus précis pour moi. Dans SQL Server, par défaut, les clés primaires sont également une partie de ce qui est appelé la "index cluster". Un index cluster définit l'ordre réel de pages de données de cette table, ce qui signifie que la clé primaire de la commande correspond à l'ordre physique des lignes sur le disque.
Je sais que l'on, peut-être davantage de MySql est également en charge les formats de tableau cluster indexation, ce qui signifie la même chose que dans SQL Server...il définit la ligne physique de la commande sur le disque.
Oracle fournit quelque chose qui s'appelle l'Indice Organisé des Tables, qui commande les lignes sur le disque par la clé primaire.
Je ne suis pas très familier avec DB2, cependant, je pense que d'un index cluster signifie que les lignes sur le disque sont stockés dans le même ordre qu'un index séparé. Je ne sais pas si l'index cluster doit correspondre à la clé primaire, ou si elle peut être distincte de l'index.
Un grand nombre de réponses ici ont examiné les propriétés de PK vs contraintes uniques. Mais il est plus important de comprendre la différence dans le concept.
Une clé primaire est considéré comme un identifiant de l'enregistrement dans la base de données. Si ces, par exemple, être référencé lors de la création de la clé étrangère références entre les tables. Une clé primaire doit, par conséquent, dans des circonstances normales ne contiennent jamais de valeurs qui ont tout meaining dans votre domaine (souvent automatiquement incremential champs sont utilisés pour la ce).
Une contrainte unique est juste une façon de faire respecter domaine spécifique de règles métier dans votre schéma de base de données.
Parce qu'un PK c'est un identifiant de l'enregistrement, vous ne pouvez pas modifier la valeur d'une clé primaire.
Becuase a PK it is an identifier for the record, you can never change the value of a primary key.
Vous avez probablement ne pas modifier la clé primaire, mais vous peut de le faire.