Qu'est-ce qu'une clé unique
Clé unique dans Oracle Identifie de manière unique chaque ligne de la base de données. Il applique essentiellement l'unicité sur la colonne définie
Choses importantes
- Il peut y avoir plus d'une clé unique par table
- Il peut être défini sur une ou plusieurs colonnes
- Les colonnes comprenant une clé unique peuvent être nulles
Comment créer la clé unique
Création de tableaux
Cela peut être fait au niveau de la colonne avec la commande de création de table dans oracle
SQL> CREATE TABLE DEPT_MASTER ( dept_nr NUMBER UNIQUE, dept_name varchar2(100) NOT NULL, dept_status NUMBER(1,0) NOT NULL, created_at date ); Table created. SQL> column CONSTRAINT_NAME format a20 SQL> column TABLE_NAME format a20 SQL> column INDEX_NAME format a20 SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME, INDEX_NAME from user_Constraints where TABLE_NAME='DEPT_MASTER';
Cela peut également être fait au niveau de la table
SQL> CREATE TABLE DEPT_MASTER ( dept_nr NUMBER , dept_name varchar2(100) NOT NULL, dept_status NUMBER(1,0) NOT NULL, created_at date, Unique(dept_nr) ); Table created. SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME, INDEX_NAME from user_Constraints where TABLE_NAME='DEPT_MASTER';
Nous pouvons également fournir la contrainte personnalisée
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 DEPT_UK Unique(dept_nr) ); Table created. SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME, INDEX_NAME from user_Constraints where TABLE_NAME='DEPT_MASTER';
Nous pouvons représenter la clé unique avec le schéma ci-dessous
Nous pouvons avoir plusieurs colonnes, c'est-à-dire une clé unique composite également et elle est définie au niveau de la table uniquement
CREATE TABLE CUSTOMER_DETAIL ( CUSTOMER_ID NUMBER(6,0), NAME VARCHAR (20) NOT NULL, AGE NUMBER(6,0) NOT NULL, ADDRESS VARCHAR2(25), SALARY NUMBER(6,0), UNIQUE(CUSTOMER_ID, NAME) ); Table Created. SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE, TABLE_NAME,INDEX_NAME from user_Constraints where TABLE_NAME='CUSTOMER_DETAIL';
Nous pouvons également donner un nom de contrainte personnalisé
SQL> CREATE TABLE CUSTOMER_DETAIL( CUSTOMER_ID NUMBER(6,0), NAME VARCHAR (20) NOT NULL, AGE NUMBER(6,0) NOT NULL, ADDRESS VARCHAR2(25), SALARY NUMBER(6,0), constraint CUSTOMER_UK UNIQUE(CUSTOMER_ID, NAME) ); Table created. SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE, TABLE_NAME,INDEX_NAME from user_Constraints where TABLE_NAME='CUSTOMER_DETAIL';
Alter Table ajouter une clé unique
Nous pouvons également ajouter une clé unique après la création de la table. Voyons l'exemple de cela
SQL> CREATE TABLE CUSTOMER_DETAIL( CUSTOMER_ID NUMBER(6,0), NAME VARCHAR (20) NOT NULL, AGE NUMBER(6,0) NOT NULL, ADDRESS VARCHAR2(25), SALARY NUMBER(6,0) ); Table created. SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE, TABLE_NAME,INDEX_NAME from user_Constraints where TABLE_NAME='CUSTOMER_DETAIL';
SQL> alter table customer_detail add constraint customer_uk UNIQUE(CUSTOMER_ID, NAME); Table altered. SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,INDEX_NAME from user_Constraints where TABLE_NAME='CUSTOMER_DETAIL';
Clé primaire et clé unique les deux
Nous pouvons avoir à la fois la clé primaire et la clé unique sur la table oracle.Voici l'exemple qui le démontre
SQL> CREATE TABLE DEPT_MASTER ( dept_nr NUMBER PRIMARY KEY, dept_name varchar2(100) UNIQUE, dept_status NUMBER(1,0) NOT NULL, created_at date ); Table created. SQL> select CONSTRAINT_NAME,CONSTRAINT_TYPE, TABLE_NAME,INDEX_NAME from user_Constraints where TABLE_NAME='DEPT_MASTER';
Comment trouver la colonne associée à la clé unique
Nous pouvons trouver la colonne associée à la clé primaire ou à la clé unique à partir de la vue du dictionnaire User_cons_columns
SQL> CREATE TABLE DEPT_MASTER ( dept_nr NUMBER PRIMARY KEY, dept_name varchar2(100) UNIQUE, dept_status NUMBER(1,0) NOT NULL, created_at date ); Table created. SQL> select CONSTRAINT_NAME, CONSTRAINT_TYPE,TABLE_NAME,INDEX_NAME from user_Constraints where TABLE_NAME='DEPT_MASTER';
SQL> SELECT Constraint_name, Table_name, Column_name FROM User_cons_columns where CONSTRAINT_NAME ='SYS_C00540915'; CONSTRAINT_NAME TABLE_NAME COLUMN_NAME -------------------- ----------- ------------ SYS_C00540915 DEPT_MASTER DEPT_NAME SQL> SELECT Constraint_name, Table_name, Column_name FROM User_cons_columns where CONSTRAINT_NAME ='SYS_C00540914'; CONSTRAINT_NAME TABLE_NAME COLUMN_NAME ------------- --------- --------- SYS_C00540914 DEPT_MASTER DEPT_NR SQL> SELECT Constraint_name, Table_name, Column_name FROM User_cons_columns where CONSTRAINT_NAME ='SYS_C00540918'; CONSTRAINT_NAME TABLE_NAME COLUMN_NAME ------------- ---------- ------------ SYS_C00540918 CUSTOMER_DETAIL CUSTOMER_ID SYS_C00540918 CUSTOMER_DETAIL NAME
Comment activer et désactiver la contrainte de clé unique
Nous pouvons le faire avec la commande alter table. Nous pouvons soit fournir le nom de la colonne, soit le nom de la contrainte
SQL> alter table customer_detail disable UNIQUE(CUSTOMER_ID, NAME); Table altered. SQL> alter table customer_detail disable constraint CUST_UK; Table altered. SQL> alter table customer_detail enable UNIQUE(CUSTOMER_ID, NAME); Table altered. SQL> alter table customer_detail enable constraint CUST_UK; Table altered.
Comment supprimer la contrainte Unique
Nous pouvons le faire avec la commande alter table. Nous pouvons soit fournir le nom de la colonne, soit le nom de la contrainte
SQL> alter table customer_detail drop UNIQUE(CUSTOMER_ID, NAME); Table altered. OR SQL> alter table customer_detail drop constraint CUST_UK; Table altered.
J'espère que vous aimez ce détail sur la clé unique dans Oracle. Nous avons donné suffisamment d'exemples à des fins de démonstration également. Veuillez fournir des commentaires à ce sujet
Lit également
Tutoriels d'administration de base de données Oracle
Comment ajouter une clé primaire dans Oracle :la clé primaire identifie de manière unique la ligne dans la table. Comment ajouter une clé primaire dans Oracle, comment supprimer une clé primaire, comment créer une clé composite
https://asktom.oracle.com/pls/asktom/f%3Fp%3D100:11:0::::P11_QUESTION_ID :5541352100346689891