Oracle
 sql >> Base de données >  >> RDS >> Oracle

Principales requêtes sur la clé primaire dans Oracle avec des exemples

Nous commencerons par une introduction à la clé primaire dans Oracle, puis nous nous plongerons dans diverses requêtes à ce sujet.

Introduction à la clé primaire

Une clé primaire est une colonne ou un ensemble de colonnes dans le tableau qui identifie de manière unique une ligne dans le tableau.

Propriétés de la clé primaire

  1. Vous ne pouvez pas avoir de valeurs en double. c'est-à-dire qu'il doit être unique dans le tableau
  2. Il ne peut pas être nul ou contenir des chaînes vides
  3. Il ne doit pas être modifié au fil du temps
  4. Nous ne pouvons avoir qu'une seule clé primaire dans la table

Recommandation

  1. Il est suggéré d'avoir des valeurs numériques comme clé primaire car c'est plus rapide
  2. Toutes les tables doivent avoir des clés primaires

Comment ajouter une clé primaire dans Oracle

La clé primaire peut être ajoutée lors de la création de la table ou peut être créée après la création de la table.
Commençons par vérifier la création de la table

Clé primaire à la création de la table

Il peut être défini au niveau de la colonne ou au niveau de la table. Les clés primaires composites sont définies uniquement au niveau de la table. Lorsque Oracle crée la clé primaire, il crée l'index unique sur cette colonne dans la table pour appliquer les contraintes de clé primaire.

Voyons d'abord le niveau Colonne

Column Level
 SQL> CREATE TABLE DEPT_MASTER (
     dept_nr NUMBER PRIMARY KEY,
     dept_name varchar2(100) NOT NULL,
     dept_status NUMBER(1,0) NOT NULL,
     created_at date
   2  );  
 Table created.
 SQL> desc DEPT_MASTER
  Name                                      Null?    Type
 
  DEPT_NR                                   NOT NULL NUMBER
  DEPT_NAME                                 NOT NULL VARCHAR2(100)
  DEPT_STATUS                               NOT NULL NUMBER(1)
  CREATED_AT                                         DATE
 
SQL>  select index_name from dba_indexes where table_name='DEPT_MASTER';
INDEX_NAME
**********
 SYS_C0013850522

SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONSTRAINT_TYPE
 
 SYS_C00478605                             C
 SYS_C00478606                             C
 SYS_C00478607        SYS_C00478607        P

Voyons maintenant pour le niveau Table

Table Level
SQL> CREATE TABLE DEPT_MASTER (
     dept_nr NUMBER ,
     dept_name varchar2(100) NOT NULL,
     dept_status NUMBER(1,0) NOT NULL,
     created_at date,
 PRIMARY KEY ("DEPT_NR")
    );   2    3    4    5    6    7
 Table created.
 
SQL>  select index_name from dba_indexes where table_name='DEPT_MASTER';
 INDEX_NAME
 SYS_C0013850525

SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONSTRAINT_TYPE
 
 SYS_C00478605                             C
 SYS_C00478606                             C
 SYS_C00478607        SYS_C00478607        P

Nous pouvons également donner le nom personnalisé de la contrainte de clé primaire à l'aide de la clause d'ajout de contrainte, comme indiqué ci-dessous

SQL> CREATE TABLE DEPT_MASTER (
     dept_nr NUMBER ,
     dept_name varchar2(100) NOT NULL,
     dept_status NUMBER(1,0) NOT NULL,
     created_at date,
 CONSTRAINT PK_DEPT_NR PRIMARY KEY ("DEPT_NR") ); 
 Table created.

 SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONSTRAINT_TYPE
 
 SYS_C00478609                             C
 SYS_C00478608                             C
 PK_DEPT_NR           PK_DEPT_NR           P

Le tableau avec le primaire peut être représenté sous forme de diagramme

Modifier la table Ajouter une clé primaire

Voyons comment ajouter le primaire après la création de la table

CREATE TABLE DEPT_MASTER (
     dept_nr NUMBER ,
     dept_name varchar2(100) NOT NULL,
     dept_status NUMBER(1,0) NOT NULL,
     created_at date
     );  

 SQL> alter table DEPT_MASTER add primary  key ( dept_nr);
 Table altered.

 SQL>  select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';

 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485778                             C
 SYS_C00485779                             C
 SYS_C00485780        SYS_C00485780        P

Nous pouvons également donner des noms personnalisés lors de l'ajout de la clé primaire

SQL> alter table DEPT_MASTER add constraint DEPT_MASTER_ID  primary  key ( dept_nr);
 Table altered.
 
SQL>  select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485778                             C
 SYS_C00485779                             C
 DEPT_MASTER_ID       DEPT_MASTER_ID       P

comment créer une clé primaire composite dans oracle

Voyons maintenant comment ajouter une clé primaire pour la clé composite

CREATE TABLE CUSTOMER(
    CUSTOMER_ID   NUMBER(6,0),  
    NAME VARCHAR (20)     NOT NULL,
    AGE  NUMBER(6,0)    NOT NULL,
    ADDRESS   VARCHAR2(25), 
    SALARY   NUMBER(6,0),     
    PRIMARY KEY (CUSTOMER_ID, NAME)
 );
 
 SQL> col CONSTRAINT_NAME  format a20
 SQL>  col INDEX_NAME format a20
 SQL> col CONSTRAINT_TYPE format a5
 SQL>  select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='CUSTOMER'; 
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485772                             C
 SYS_C00485773                             C
 SYS_C00485774        SYS_C00485774        P

Nous pouvons également attribuer un nom personnalisé aux contraintes de clé primaire sur la clé composite

SQL>CREATE TABLE CUSTOMER(
    CUSTOMER_ID   NUMBER(6,0),
    NAME VARCHAR (20)     NOT NULL,
    AGE  NUMBER(6,0)    NOT NULL,
    ADDRESS   VARCHAR2(25), SQL>
    SALARY   NUMBER(6,0),
  CONSTRAINT PK_CUSTOMER  PRIMARY KEY (CUSTOMER_ID, NAME)
 );
 Table created.
 
SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='CUSTOMER';
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485776                             C
 SYS_C00485775                             C
 PK_CUSTOMER          PK_CUSTOMER          P

Le primaire composite peut être représenté par

comment supprimer la clé primaire dans oracle

Nous pouvons supprimer la clé primaire à l'aide de la commande ci-dessous. Nous pouvons utiliser la suppression de la clé primaire ou la suppression des contraintes

SQL>  select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485778                             C
 SYS_C00485779                             C
 DEPT_MASTER_ID       DEPT_MASTER_ID       P
 
SQL> alter table DEPT_MASTER  drop  primary  key;
 Table altered.

SQL> select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485778                             C
 SYS_C00485779                             C

SQL> alter table DEPT_MASTER add constraint DEPT_MASTER_ID  primary  key ( dept_nr);
 Table altered.

SQL>  alter table DEPT_MASTER  drop constraint DEPT_MASTER_ID;
 Table altered.

SQL>  select CONSTRAINT_NAME,INDEX_NAME,CONSTRAINT_TYPE from user_constraints where TABLE_NAME='DEPT_MASTER';
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 SYS_C00485778                             C
 SYS_C00485779                             C

Comment activer/désactiver les contraintes de clé primaire

SQL> alter table DEPT_MASTER enable  primary key;  
Table altered.   

SQL>  alter table DEPT_MASTER  disable primary key;  
Table altered. 

SQL> alter table DEPT_MASTER  disable constraint DEPT_MASTER_ID;  Table altered. 

SQL> alter table DEPT_MASTER enable constraint DEPT_MASTER_ID; 
 Table altered

Comment ajouter une clé primaire à l'aide de l'index

Lorsque Oracle crée la clé primaire, il crée l'index unique sur cette colonne dans la table pour appliquer les contraintes de clé primaire. Mais si la table a un index avant l'ajout de la clé primaire, Oracle peut également utiliser cet index pour les contraintes de clé primaire. Oracle peut appliquer des contraintes de clé primaire sur les index uniques, non uniques et composites. Oracle utilisera l'index en fonction de la table d'index déjà présente. Nous pouvons également utiliser la clause using index au moment de la création de la clé primaire également si nous voulons appliquer une contrainte à l'aide d'un index particulier

SQL> create index DEPT_MASTER_IDX on DEPT_MASTER(dept_nr);
 Index created.

 SQL> alter table DEPT_MASTER add constraint DEPT_MASTER_ID  primary  key ( dept_nr) using index DEPT_MASTER_IDX;
 Table altered.

 SQL> col CONSTRAINT_NAME  format a20
 SQL> col INDEX_NAME format a20
 SQL> col CONSTRAINT_TYPE format a5
 SQL> /
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 DEPT_MASTER_ID       DEPT_MASTER_IDX      P
 SYS_C00485779                             C
 SYS_C00485778                             C

Même si nous n'utilisons pas using index dans cette déclaration précédente, l'oracle aura toujours le même index non unique pour appliquer les contraintes de clé primaire

SQL> create index DEPT_MASTER_IDX on DEPT_MASTER(dept_nr);
 Index created.
 
SQL> alter table DEPT_MASTER add constraint DEPT_MASTER_ID  primary  key ( dept_nr);
 Table altered.
 
SQL> col CONSTRAINT_NAME  format a20
 SQL> col INDEX_NAME format a20
 SQL> col CONSTRAINT_TYPE format a5
 SQL> /
 CONSTRAINT_NAME      INDEX_NAME           CONST
 
 DEPT_MASTER_ID       DEPT_MASTER_IDX      P
 SYS_C00485779                             C
 SYS_C00485778      

comment modifier la clé primaire dans oracle

Nous ne pouvons pas simplement modifier la valeur de la clé primaire. nous devrons supprimer l'ancienne clé et créer la nouvelle clé principale. Si nous avons des contraintes de clé étrangère faisant référence à celles-ci. alors nous devons d'abord les déposer et déposer la clé primaire et recréer la nouvelle clé primaire

comment incrémenter automatiquement la clé primaire dans oracle

Avec 12c, nous avons deux façons simples d'implémenter l'incrémentation automatique pour la clé primaire

Colonnes d'identité
Dans Oracle Database 12c, nous pouvons définir des colonnes de table avec le mot-clé SQL IDENTITY qui est un mot-clé SQL de l'American National Standards Institute (ANSI). Qui sont auto-incrémentés au moment de l'insertion (comme dans MySQL).

Example:
create table test
(
id number generated as identity PRIMARY KEY,
name varchar2(100),
email varchar2(100),
password varchar2(100)firstname varchar2(100)lastname varchar2(100)
);

Séquence comme valeur par défaut
Avec Oracle Database 12c, nous pouvons affecter directement la séquence nextval comme valeur par défaut pour une colonne, vous n'avez donc plus besoin de créer un déclencheur pour remplir la colonne avec la valeur suivante de la séquence, il vous suffit de la déclarer avec définition du tableau. C'est une sorte de fonctionnalité d'auto-incrémentation pour une colonne dans Oracle, tout comme MySQL

Example:
create sequence tech_test_seq start with 1 increment by 1 nocycle;
create table test
(
id number default tech_test_seq.nextval primary key
name varchar(30)
);

comment renommer la clé primaire dans oracle

Nous pouvons facilement renommer les contraintes de clé primaire en utilisant alter table rename sql. Cela n'impacte pas le traitement et la clé étrangère

CREATE TABLE DEPT_MASTER (
     dept_nr NUMBER ,
     dept_name varchar2(100) NOT NULL,
     dept_status NUMBER(1,0) NOT NULL,
     created_at date
     );
alter table DEPT_MASTER add constraint DEPT_MASTER_ID primary key ( dept_nr);
Table altered.

select CONSTRAINT_NAME from user_constraints where TABLE_NAME='DEPT_MASTER' and constraint_type = 'P';
CONSTRAINT_NAME
-------------
DEPT_MASTER_ID

ALTER TABLE DEPT_MASTER RENAME CONSTRAINT DEPT_MASTER_ID TO DEPT_MASTER_ID_PK;

select CONSTRAINT_NAME from user_constraints where TABLE_NAME='DEPT_MASTER' and constraint_type = 'P';
CONSTRAINT_NAME
-------------
DEPT_MASTER_ID_PK


I hope you like the content on  primary key and it clear all doubts about the Primary Key concept. Please do provide the feedback and what else can be added in this post 

Lit également
Check Constraint dans Oracle :Oracle Check Constraint est utilisé pour appliquer des règles d'intégrité basées sur des expressions logiques, telles que des comparaisons. La condition de vérification doit renvoyer vrai ou faux
Contrainte non nulle dans Oracle :
Fonction NVL2 dans Oracle :Apprenez à utiliser la fonction NVL2 dans Oracle avec des exemples
alter table modify column oracle
https://en.wikipedia.org/wiki/Primary_key

Cours recommandés

Voici le joli cours Udemy pour Oracle SQL
Oracle-Sql-Step-by-step :Ce cours couvre les bases de SQL, les jointures, la création de tables et la modification de sa structure, la création de vues, l'union, l'union -all et bien d'autres choses . Un excellent cours et un cours indispensable pour les débutants SQL
Le cours complet de certification Oracle SQL :C'est un bon cours pour tous ceux qui veulent être prêts à travailler pour les compétences de développeur SQL. Un cours bien expliqué
Oracle SQL Developer :Essentials, Tips and Tricks  :l'outil de développement Oracle SQL est utilisé par de nombreux développeurs. Ce cours nous donne des astuces et des leçons sur la façon de l'utiliser efficacement et de devenir un développeur sql productif
Oracle SQL Performance Tuning Masterclass 2020  :l'optimisation des performances est l'une des compétences essentielles et les plus recherchées. C'est un bon cours pour en savoir plus et commencer à ajuster les performances SQL