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
- Vous ne pouvez pas avoir de valeurs en double. c'est-à-dire qu'il doit être unique dans le tableau
- Il ne peut pas être nul ou contenir des chaînes vides
- Il ne doit pas être modifié au fil du temps
- Nous ne pouvons avoir qu'une seule clé primaire dans la table
Recommandation
- Il est suggéré d'avoir des valeurs numériques comme clé primaire car c'est plus rapide
- 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