Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Eindeutiger Schlüssel in Oracle mit Beispielen

Was ist ein eindeutiger Schlüssel

Eindeutiger Schlüssel in Oracle Identifiziert jede Zeile in der Datenbank eindeutig. Es erzwingt im Wesentlichen die Eindeutigkeit der definierten Spalte
Wichtige Dinge

  1. Es kann mehr als einen eindeutigen Schlüssel pro Tabelle geben
  2. Es kann für eine oder mehrere Spalten definiert werden
  3. Spalten mit eindeutigem Schlüssel können nullfähig sein

So erstellen Sie den eindeutigen Schlüssel

Tabellenerstellung

Dies kann auf Spaltenebene mit dem Befehl create table in Oracle

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

Dies kann auch auf Tabellenebene erfolgen

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

Wir können auch die benutzerdefinierte Einschränkung bereitstellen

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

Wir können den eindeutigen Schlüssel mit dem folgenden Diagramm darstellen

Wir können auch mehrere Spalten haben, d. h. zusammengesetzte eindeutige Schlüssel, und sie werden nur auf Tabellenebene definiert

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

Wir können auch einen benutzerdefinierten Constraint-Namen geben

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

Ändern Sie die Tabelle und fügen Sie einen eindeutigen Schlüssel hinzu

Wir können auch einen eindeutigen Schlüssel nach der Tabellenerstellung hinzufügen. Sehen wir uns das Beispiel dafür an

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

Primärschlüssel und eindeutiger Schlüssel beide

Wir können sowohl den Primärschlüssel als auch den eindeutigen Schlüssel in der Orakeltabelle haben. Hier ist das Beispiel, das dies demonstriert

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

So finden Sie die mit dem eindeutigen Schlüssel verknüpfte Spalte

Wir können die Spalte, die dem Primärschlüssel oder dem eindeutigen Schlüssel zugeordnet ist, in der Wörterbuchansicht User_cons_columns

finden
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 

So aktivieren und deaktivieren Sie die Einschränkung für eindeutige Schlüssel

Wir können dies mit dem Befehl alter table tun. Wir können entweder den Spaltennamen oder den Constraint-Namen angeben

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.

So löschen Sie die Eindeutigkeitsbeschränkung

Wir können dies mit dem Befehl alter table tun. Wir können entweder den Spaltennamen oder den Einschränkungsnamen

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

Ich hoffe, Ihnen gefällt dieses Detail zum eindeutigen Schlüssel in Oracle. Wir haben auch genügend Beispiele für Demonstrationszwecke gegeben. Bitte geben Sie Feedback dazu

Liest auch

Tutorials zur Verwaltung von Oracle-Datenbanken
So fügen Sie Primärschlüssel in Oracle hinzu:Der Primärschlüssel identifiziert die Zeile in der Tabelle eindeutig. So fügen Sie den Primärschlüssel in Oracle hinzu, wie löschen Sie den Primärschlüssel, wie erstellen Sie einen zusammengesetzten Schlüssel
https://asktom.oracle.com/pls/asktom/f%3Fp%3D100:11:0::::P11_QUESTION_ID:5541352100346689891