Oracle
 sql >> Database >  >> RDS >> Oracle

Chiave univoca in Oracle con esempi

Cos'è la chiave univoca

La chiave univoca in Oracle identifica in modo univoco ogni riga nel database. Fondamentalmente impone l'unicità alla colonna definita
Cose importanti

  1. Può esserci più di una chiave univoca per tabella
  2. Può essere definito su una o più colonne
  3. Le colonne che contengono la chiave Univoca possono essere nulle

Come creare la Chiave Unica

Creazione della tavola

Può essere fatto a livello di colonna con il comando crea tabella in 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';

Può essere fatto anche a livello di tavolo

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

Possiamo fornire anche il vincolo personalizzato

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

Possiamo rappresentare la chiave Unica con il diagramma sottostante

Possiamo avere più colonne, ad esempio una chiave univoca composita, ed è definita solo a livello di tabella

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

Possiamo anche dare un nome di vincolo personalizzato

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 aggiunge una chiave univoca

Possiamo anche aggiungere la chiave Univoca dopo la creazione della tabella. Vediamo l'esempio di ciò

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

Chiave primaria e chiave univoca entrambe

Possiamo avere sia la chiave primaria che la chiave univoca sulla tabella di Oracle. Ecco l'esempio che lo dimostra

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

Come trovare la colonna associata alla chiave univoca

Possiamo trovare la colonna associata alla chiave primaria o alla chiave univoca dalla vista del dizionario 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 

Come abilitare e disabilitare il vincolo della chiave univoca

Possiamo farlo con il comando alter table. Possiamo fornire il nome della colonna o il nome del vincolo

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.

Come eliminare il vincolo Unique

Possiamo farlo con il comando alter table. Possiamo fornire il nome della colonna o il nome del vincolo

SQL> alter table customer_detail drop  UNIQUE(CUSTOMER_ID, NAME);
 Table altered.
 OR
 SQL> alter table customer_detail drop constraint  CUST_UK;
 Table altered.

Spero che questo dettaglio su Unique key in Oracle ti piaccia. Abbiamo fornito esempi sufficienti anche a scopo dimostrativo. Si prega di fornire il feedback su di esso

Legge anche

Esercitazioni sull'amministrazione del database Oracle
Come aggiungere la chiave primaria in Oracle:la chiave primaria identifica in modo univoco la riga nella tabella. Come aggiungere la chiave primaria in Oracle, come eliminare la chiave primaria, come creare una chiave composita
https://asktom.oracle.com/pls/asktom/f%3Fp%3D100:11:0::::P11_QUESTION_ID:5541352100346689891