Maison  >  Article  >  base de données  >  Quelle est la différence entre la clé primaire et l’index unique ?

Quelle est la différence entre la clé primaire et l’index unique ?

一个新手
一个新手original
2017-09-08 14:31:533534parcourir

La différence entre la clé primaire et l'index unique

--Différence

La clé primaire est une contrainte, et l'index unique est un index. Les deux sont essentiellement différents. Ce qui précède est différent.
Une fois la clé primaire créée, elle doit contenir un index unique. L'index unique n'est pas nécessairement la clé primaire.
Les colonnes d'index uniques autorisent les valeurs nulles, tandis que les colonnes de clé primaire n'autorisent pas les valeurs nulles.
Lorsque la colonne de clé primaire est créée, elle est par défaut valeur nulle + index unique.
Les clés primaires peuvent être référencées en tant que clés étrangères par d'autres tables, mais pas les index uniques.
Une table ne peut créer qu'une seule clé primaire au maximum, mais plusieurs index uniques peuvent être créés.
Les clés primaires sont plus adaptées aux identifiants uniques qui ne sont pas faciles à modifier, tels que les colonnes à incrémentation automatique, les numéros d'identification, etc.
En mode RBO, la priorité du plan d'exécution de la clé primaire est supérieure à celle de l'index unique. Les deux peuvent améliorer la vitesse des requêtes.

-- Créer une table contenant uniquement la clé primaire et l'index unique

CREATE TABLE test
(PrimaryKey VARCHAR2(20),
  UniqueKey  VARCHAR2(20)
);

-- Créer respectivement la clé primaire et l'index unique, avec une syntaxe différente

ALTER TABLE test ADD CONSTRAINT test_PrimaryKey PRIMARY KEY (PrimaryKey);
CREATE UNIQUE INDEX test_UniqueKey ON test (UniqueKey);

- - Dans USER_INDEXES, vous pouvez voir deux noms d'index

SELECT table_name,table_type,index_name,index_type,uniqueness
  FROM USER_INDEXES
  WHERE TABLE_NAME='TEST';


-- Dans USER_IND_COLUMNS, vous pouvez voir deux noms de champs d'index

SELECT table_name,index_name,column_name,column_position
  FROM USER_IND_COLUMNS
  WHERE TABLE_NAME='TEST';


-- Dans USER_CONSTRAINTS, seul le nom de la contrainte de clé primaire peut être vu

SELECT table_name,constraint_name,constraint_type
  FROM USER_CONSTRAINTS
  WHERE TABLE_NAME='TEST';


-- Dans USER_CONS_COLUMNS Seul le nom du champ de contrainte de clé primaire est visible

SELECT table_name,constraint_name,column_name,position
  FROM USER_CONS_COLUMNS
  WHERE CONSTRAINT_NAME IN (SELECT CONSTRAINT_NAME                          
   FROM USER_CONSTRAINTS                            
   WHERE TABLE_NAME='TEST');

-- Ajouter une contrainte non nulle pour l'index unique

ALTER TABLE test MODIFY UniqueKey NOT NULL;

- - Dans USER_CONSTRAINTS Seul le nom de la contrainte de clé primaire et le nom de la contrainte non nulle peuvent être vus

SELECT table_name,constraint_name,constraint_type
  FROM USER_CONSTRAINTS
  WHERE TABLE_NAME='TEST'


-- Dans USER_CONS_COLUMNS uniquement la clé primaire Le nom du champ de contrainte et le nom de la contrainte non nul peuvent être vus Nom du champ de contrainte vide

SELECT table_name,constraint_name,column_name,position
  FROM USER_CONS_COLUMNS
  WHERE CONSTRAINT_NAME IN (SELECT CONSTRAINT_NAME                             
  FROM USER_CONSTRAINTS                            
  WHERE TABLE_NAME='TEST')

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn