Co to jest unikalny klucz
Unikalny klucz w Oracle Unikatowo identyfikuje każdy wiersz w bazie danych. Zasadniczo wymusza unikalność zdefiniowanej kolumny
Ważne rzeczy
- Może być więcej niż jeden klucz unikalny na tabelę
- Może być zdefiniowany w jednej lub kilku kolumnach
- Kolumny zawierające klucz Unique mogą mieć wartość null
Jak stworzyć unikalny klucz
Tworzenie tabeli
Można to zrobić na poziomie kolumny za pomocą polecenia tworzenia tabeli w 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';

Można to zrobić również na poziomie stołu
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';

Możemy również dostarczyć niestandardowe ograniczenie
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';

Możemy przedstawić klucz Unique za pomocą poniższego diagramu

Możemy mieć wiele kolumn, czyli złożony klucz Unique, który jest zdefiniowany tylko na poziomie tabeli
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';

Możemy również nadać własną nazwę ograniczenia
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';


Zmień tabelę dodaj unikalny klucz
Możemy również dodać Unikalny klucz po utworzeniu tabeli. Zobaczmy przykład tego
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';

Klucz główny i klucz unikalny Oba
W tabeli Oracle możemy mieć zarówno klucz podstawowy, jak i klucz unikalny. Oto przykład ilustrujący to
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';

Jak znaleźć kolumnę powiązaną z unikalnym kluczem
Kolumnę powiązaną z kluczem podstawowym lub kluczem unikalnym możemy znaleźć w widoku słownika 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
Jak włączyć i wyłączyć ograniczenie klucza Unikalne
Możemy to zrobić poleceniem alter table. Możemy podać nazwę kolumny lub nazwę ograniczenia
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.
Jak usunąć ograniczenie unikatowe
Możemy to zrobić poleceniem alter table. Możemy podać nazwę kolumny lub nazwę ograniczenia
SQL> alter table customer_detail drop UNIQUE(CUSTOMER_ID, NAME); Table altered. OR SQL> alter table customer_detail drop constraint CUST_UK; Table altered.
Mam nadzieję, że podoba Ci się ten szczegół na kluczu Unique w Oracle. Podaliśmy również wystarczająco dużo przykładów w celach demonstracyjnych. Przekaż opinię na ten temat
Też czyta
Samouczki administracyjne bazy danych Oracle
Jak dodać klucz podstawowy w Oracle :klucz podstawowy jednoznacznie identyfikuje wiersz w tabeli. Jak dodać klucz podstawowy w Oracle, jak usunąć klucz podstawowy, jak utworzyć klucz złożony
https://asktom.oracle.com/pls/asktom/f%3Fp%3D100:11:0::::P11_QUESTION_ID:5541352100346689891