Maison > Article > base de données > Quelle est la différence entre la clé primaire et l’index unique ?
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!