SQL 10-2. UNIQUE 제약 조건
관련링크
본문
UNIQUE키 무결성 제약 조건은 열 또는 열 집합(키)의 모든 값이 고유하게 유지되도록 한다.
즉 한 테이블에 있는 두 행은 지정된 열 또는 열 집합에서 중복된 값을 가질 수 없다.
UNIQUE키 예약 조건이 정의된 열 또는 열 집합을 고유 키라고 한다.
UNIQUE 제약 조건이 하나 이상의 열을 포함하는 경우 해당 열 그룹을 조합 고유 키라고 한다.
UNIQUE 제약 조건을 지정한 열 NOT NULL 제약 조건을 정의하지 않으면 이 열에는 널 값이 허용된다.
Oracle server는 널 값은 어떠한 값과도 동일한 것으로 취급하지 않으므로, NOT NULL 제약 조건이 없는 열에는 널 값이 포함한 행이 여러 개 존재할 수 있다.
그러나 MSSQL에서는 널 값이라고 할지라고 한 행만 NULL값을 가질 수 있다.
열에 널 값이 있어도 (또는 조합 UNIQUE키가 적용되는 모든 열에 널 값이 있어도) UNIQUE 제약 조건은 항상 만족된다.
참고 : 둘 이상의 열에 대한 UNIQUE 제약 조건 검색 방식 때문에 부분적으로 널을 포함할 수 있는 조합 UNIQUE키 제약
조건이 적용될 경우 널이 아닌 열(들)은 동일한 값을 가질 수 없다.
예제) UNIQUE 제약 조건 : 테이블 레벨
테이블 레벨 또는 열 레벨로 정의한다.
오라클 디비 예제 :
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25) ,
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
... ,
CONSTRAINT emp_email_uk UNIQUE( email ));
☞설명) UIQUE 제약 조건
UNIQUE 제약 조건은 열 레벨 또는 테이블 레벨로 정의할 수 있다.
조합 고유 키는 테이블 레벨 정의를 사용하여 생성한다.
예제는 UNIQUE 제약 조건을 EMPLOYEES 테이블의 EMALL 열에 적용하며 제약 조건의 이름은 EMP_EMALL_UK이다.
참고 : Oracle server는 암시적(implicit)으로 고유 키 열에 고유 인덱스를 생성하여 UNIQUE 제약 조건을 시행한다.
예제) UNIQUE 제약 조건 : 컬럼(열) 레벨
테이블 레벨 또는 열 레벨로 정의한다.
오라클 디비 예제 :
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25) CONSTRAINT emp_email_uk UNIQUE,
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
... ,
CONSTRAINT emp_email_uk UNIQUE(email));
☞설명)
위 예제와 비교하여 테이블 레벨과 열 레벨을 비교해 보자.
(
...
fname varchar(20) NOT NULL,
minit char(1) NULL,
lname varchar(30) NOT NULL,
job_id smallint NOT NULL
DEFAULT 1
REFERENCES jobs(job_id),
... ,
CONSTRAINT emp_email_uk UNIQUE(email)
)
MSSQL 디비 예제 :복합키 설정
CREATE TABLE sales
(
stor_id char(4) NOT NULL
REFERENCES stores(stor_id),
ord_num varchar(20) NOT NULL,