Какво е уникален ключ
Уникален ключ в Oracle Уникално идентифицира всеки ред в базата данни. По принцип налага уникалност на дефинираната колона
Важни неща
- Може да има повече от един уникален ключ на таблица
- Може да се дефинира в една или повече колони
- Колоните, съдържащи уникален ключ, може да са нулеви
Как да създадете уникален ключ
Създаване на таблица
Може да се направи на ниво колона с команда за създаване на таблица в 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';

Може да се направи и на ниво таблица
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';

Можем да предоставим и персонализираното ограничение
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';

Можем да представим уникалния ключ с диаграмата по-долу

Можем да имаме и множество колони, т.е. съставен уникален ключ и той е дефиниран само на ниво таблица
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';

Можем също да дадем персонализирано име на ограничение
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';


Промяна на таблицата добавя уникален ключ
Можем също да добавим уникален ключ след създаване на таблица. Нека видим примера за това
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';

И двата първичен ключ и уникален ключ
Можем да имаме както първичен ключ, така и уникален ключ в таблицата на оракула. Ето примера, който го демонстрира
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';

Как да намерите колона, свързана с уникален ключ
Можем да намерим колоната, свързана с първичен ключ или уникален ключ от изгледа на речника 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
Как да активирате и деактивирате ограничението на уникалния ключ
Можем да направим това с командата alter table. Можем да предоставим името на колоната или името на ограничението
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.
Как да премахнете ограничението Unique
Можем да направим това с командата alter table. Можем да предоставим името на колоната или името на ограничението
SQL> alter table customer_detail drop UNIQUE(CUSTOMER_ID, NAME); Table altered. OR SQL> alter table customer_detail drop constraint CUST_UK; Table altered.
Надяваме се да ви хареса тази подробност за уникалния ключ в Oracle. Дадохме достатъчно примери и с демонстративна цел. Моля, дайте отзиви за него
Също чете
Уроци за администриране на база данни на Oracle
Как да добавите първичен ключ в oracle:първичният ключ уникално идентифицира реда в таблицата. Как да добавите първичен ключ в oracle, как да махнете първичен ключ, как да създадете композитен ключ
https://asktom.oracle.com/pls/asktom/f%3Fp%3D100:11:0::::P11_QUESTION_ID:5541352100346689891