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
2021-04-21 17:31:3916389parcourir

Différence : 1. La clé primaire est une contrainte, et l'index unique est un index. 2. Une fois la clé primaire créée, elle doit contenir un index unique. L'index unique n'est pas nécessairement la clé primaire. 3. La colonne d'index unique autorise les valeurs nulles, mais la colonne de clé primaire n'autorise pas les valeurs nulles. 4. La clé primaire peut être référencée en tant que clé étrangère par d'autres tables, mais pas l'index unique.

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

L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.

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

  • La clé primaire est une contrainte, l'index unique est un index, et les deux sont essentiellement différents.

  • 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 une valeur nulle + un index unique.

  • Les clés primaires peuvent être référencées en tant que clés étrangères par d'autres tables, mais les index uniques ne le peuvent pas.

  • 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.

Exemple :

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

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

-- Créez-les séparément Clé primaire et index unique, la syntaxe est différente

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

-- Deux noms d'index peuvent être vus dans USER_INDEXES

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';

--Sur USER_CONSTRAINTS, vous ne pouvez voir que le nom de la contrainte de clé primaire

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


--Seul le nom du champ de contrainte de clé primaire peut être vu dans USER_CONS_COLUMNS

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;

- - Seuls les noms de contraintes de clé primaire et les noms de contraintes non nuls peuvent être vus dans USER_CONSTRAINTS

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


--Uniquement le champ de contrainte de clé primaire les noms et les contraintes non nulles peuvent être vus dans USER_CONS_COLUMNS Nom du champ

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')

Pour plus de connaissances liées à la programmation, veuillez visiter : Enseignement de la programmation ! !

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