Quelqu'un m'a posé cette question lors d'une interview ...
Une clé primaire est un champ unique dans une table, mais il est spécial en ce sens que la table considère cette ligne comme sa clé. Cela signifie que d'autres tables peuvent utiliser ce champ pour créer des relations de clé étrangère entre elles.
Une contrainte unique signifie simplement qu'un champ particulier doit être unique.
Les clés primaires ne peuvent pas être nulles. Des clés uniques peuvent.
TL; DR Beaucoup peut être impliqué par PRIMARY KEY
(unicité, référence, non-null-ness, clustering, etc.) mais rien qui ne puisse être déclaré explicitement en utilisant UNIQUE
.
Je suggère que si vous êtes le genre de codeur qui aime la commodité de SELECT * FROM...
sans avoir à répertorier toutes ces colonnes embêtantes, alors PRIMARY KEY
est fait pour vous.
une relvar peut avoir plusieurs clés, mais nous en choisissons une pour souligner et appeler celui-là la clé primaire. Le choix est arbitraire, donc le le concept de primaire n’est pas vraiment très important d’un point de vue logique de vue. Le concept général de clé est cependant très important! Le terme clé de candidat signifie exactement la même chose que la clé (c'est-à-dire que l'ajout du candidat n'a pas de signification réelle - cela a été proposé par Ted Codd parce qu'il considérait chaque clé comme un candidat à la nomination. clé) ... SQL permet à un sous-ensemble des colonnes d'une table d'être déclaré comme une clé pour cette table. Cela permet également à l'un d'entre eux d'être nommé comme clé primaire. Spécifier une clé comme étant primaire rend pour un certain confort en relation avec autre contraintes qui pourraient être nécessaires
Qu'est-ce qu'une clé? par Hugh Darwen
il est habituel ... de choisir une clé comme clé primaire (et toute autre clé pour la relvar en question est alors dite clé alternative) . Mais si une clé doit être choisie comme clé principale et, le cas échéant, laquelle, sont essentiellement des problèmes psychologiques, au-delà de la compétence du modèle relationnel en tant que tel. Par souci de bonne pratique, la plupart des base les relvars devraient probablement avoir une clé primaire - mais, pour répéter cette règle, si c'est une règle, ce n'est pas vraiment un problème relationnel en tant que tel ... Fort recommandation [aux utilisateurs de SQL]: Pour les tables de base, utilisez dans tous les cas PRIMARY KEY et/ou UNIQUE spécifications pour s’assurer que chacune d’entre elles table a au moins une clé.
SQL et théorie relationnelle: comment écrire un code SQL précis De C. J. Date
En SQL standard PRIMARY KEY
UNIQUE
).NOT NULL
mais vous pouvez le spécifier explicitement lors de la création de colonnes (mais vous devriez éviter les nulls de toute façon!)FOREIGN KEY
mais vous pouvez les spécifier explicitement.Dans certains produits, PRIMARY KEY
implique l'index clusterisé de la table, mais vous pouvez le spécifier explicitement (vous ne souhaitez peut-être pas que la clé primaire soit l'index clusterisé!)
Pour certaines personnes, PRIMARY KEY
a une signification purement psychologique:
Unique Key contraintes:
Cela autorisera une valeur nulle dans la colonne.
ALTER TABLE nom_table ADD CONSTRAINT UNIQUE_CONSTRAINT UNIQUE (nom_colonne1, nom_colonne2, ...)
Clé primaire:
Il n'autorisera pas les valeurs nulles.
ALTER TABLE nom_table ADD CONSTRAINT KEY_CONSTRAINT PRIMARY KEY (nom_colonne)
Chaque clé primaire est une contrainte unique, mais une table peut comporter, outre la clé PK, des contraintes uniques supplémentaires.
Supposons que vous avez une table Employees, PK EmployeeID. Vous pouvez ajouter une contrainte unique sur SSN, par exemple.
En plus de la réponse d'Andrew, vous ne pouvez avoir qu'une clé primaire par table, mais vous pouvez avoir de nombreuses contraintes uniques.
Une clé primaire est un ensemble minimal de colonnes tel que deux enregistrements quelconques ayant 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.
Cela ressemble exactement à une contrainte d'unicité.
La contrainte UNIQUE identifie de manière unique chaque enregistrement d'une table de base de données.
Les contraintes UNIQUE et PRIMARY KEY fournissent toutes les deux une garantie d'unicité pour une colonne ou un ensemble de colonnes.
Une contrainte PRIMARY KEY est automatiquement définie par une contrainte UNIQUE.
Notez que vous pouvez avoir plusieurs contraintes UNIQUE par table, mais une seule contrainte PRIMARY KEY par table.
Les clés primaires sont essentiellement une combinaison de (unique + non nul). De plus, lors de la référence à une clé étrangère, rdbms nécessite une clé primaire.
Une clé unique impose simplement l'unicité de la colonne. Une valeur de champ peut être NULL dans le cas d'une clé unique. De plus, il ne peut pas être utilisé pour référencer une clé étrangère, ce qui est assez évident car u peut contenir des valeurs NULL.
Il y a plusieurs bonnes réponses ici jusqu'à présent. Outre le fait qu'une clé primaire ne peut pas être null, constitue une contrainte unique et peut être composée de plusieurs colonnes, il existe des significations plus profondes 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 une signification plus spécifique pour moi. Dans SQL Server, par défaut, les clés primaires font également partie de ce qu'on appelle "l'index clusterisé". Un index clusterisé définit l'ordre réel des pages de données pour cette table particulière, ce qui signifie que l'ordre de la clé primaire correspond à l'ordre physique des lignes sur le disque.
Je sais que l'un des formats de table de MySql, éventuellement plusieurs, prend également en charge l'indexation en cluster, ce qui signifie la même chose que dans SQL Server ... elle définit le classement physique des lignes sur le disque.
Oracle fournit quelque chose appelé Index Organized Tables (Tableaux organisés par index), qui classe les lignes sur le disque en fonction de la clé primaire.
Je ne connais pas très bien DB2, mais je pense qu’un index clusterisé signifie que les lignes du disque sont stockées dans le même ordre qu’un index séparé. Je ne sais pas si l'index clusterisé doit correspondre à la clé primaire ou s'il peut s'agir d'un index distinct.
Un grand nombre de réponses ici ont discuté des propriétés de PK par rapport à des contraintes uniques. Mais il est plus important de comprendre la différence de concept.
Une clé primaire est considérée comme un identifiant de l'enregistrement dans la base de données. Celles-ci seront par exemple référencées lors de la création de références de clé étrangère entre tables. Dans des circonstances normales, une clé primaire ne doit donc jamais contenir de valeurs ayant une importance quelconque dans votre domaine (des champs incrémentiels sont automatiquement utilisés pour cela).
Une contrainte unique est simplement un moyen d'appliquer des règles métier spécifiques à un domaine dans votre schéma de base de données.
Parce que la clé est un identifiant pour l'enregistrement, vous ne pouvez jamais changer la valeur d'une clé primaire.
create table a1 (id int,name varchar(20),city varchar(20),state varchar(20),country varchar(28) constraint pk_a1 primary key(id));
insert into a1 values(101,'sohan','gkp','up','india');
create table a1 (id int primary key,name varchar(20),city varchar(20),state varchar(20),country varchar(28));
insert into a1 values(101,'sohan','gkp','up','india');
quelle est la différence entre ces deux tables utilisant une clé primaire et des contraintes
Les deux garantissent l'unicité des lignes du tableau, à l'exception des valeurs nulles, comme indiqué dans certaines des autres réponses.
De plus, une clé primaire "vient" avec un index, qui peut être en cluster ou non.
La clé primaire ne peut pas être nulle mais la contrainte unique est nulle .. .. lorsque vous choisissez une clé primaire pour votre table, il indexe automatiquement ce champ.