oracle

제약조건 _UNIQUE

꽃솜이 2021. 4. 1. 03:42

UNIQUE

 

UNIQUE 제약조건은 말 그대로 해당 컬럼에 들어가는 값이 유일해야 한다는 의미다.

즉 중복 값을 허용하지 않는다.

 

컬럼명 데이터타입 UNIQUE
혹은
CONSTRAINTS 제약조건명 UNIQUE(컬럼명, ...)

 

UNIQUE 제약조건 역시 데이터베이스 객체이므로,

컬럼 정의 부분에 UNIQUE를 명시하거나 별도로 CONSTRAINTS 키워드를 사용해 정의할 수 있다.

UNIQUE와 NOT NULL을 같이 명시하면 해당 컬럼에 들어오는 값은 유일함은 물론 반드시 입력해야 한다.

또한 NULL 허용 컬럼에도 UNIQUE 제약조건을 붙일 수 있다.

 

CREATE TABLE ex2_7 (
	COL_UNIQUE_NULL    VARCHAR2(10) UNIQUE,
	COL_UNIQUE_NNULL   VARCHAR2(10) UNIQUE NOT NULL,
	COL_UNIQUE         VARCHAR2(10),
	CONSTRAINTS unique_nm1 UNIQUE (COL_UNIQUE)
);


결과
	table EX2_7이(가) 생성되었습니다.

 

SELECT constraint_name, constraint_type, table_name, search_condition
FROM user_constraints
WHERE table_name = 'EX2_7';
     
     
결과
    CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME   SEARCH_CONDITION
    --------------- --------------- ------------ -------------------------------
    SYS_C0011299    C               EX2_7        "COL_UNIQUE_NNULL" IS NOT NULL
    SYS_C0011300    U               EX2_7
    SYS_C0011301    U               EX2_7
    UNIQUE_NM1      U               EX2_7

UNIQUE 제약조건 3개가 만들어졌다.

UNIQUE_NM1제약조건은 CONSTRAINTS 키워드를 사용해 제약조건명을 명시해서 만들었으므로

UNIQUE_NM1이란 이름으로 생성됐음을 확인할 수 있다.

그럼 데이터를 입력해 보자.

 

INSERT INTO ex2_7 VALUES ('AA', 'AA', 'AA');


결과
    1개 행 이(가) 삽입되었습니다.
INSERT INTO ex2_7 VALUES ('AA', 'AA', 'AA');


결과
    SQL 오류: ORA-00001: 무결성 제약 조건(ORA_USER.SYS_C0011300)에 위배됩니다.
INSERT INTO ex2_7 VALUES ('', 'BB', 'BB');


결과
    1개 행 이(가) 삽입되었습니다.

COL_UNIQUE_NULL 컬럼에 NULL이 성공적으로 입력되었다.

 

INSERT INTO ex2_7 VALUES ('', 'CC', 'CC');


결과
    1개 행 이(가) 삽입되었습니다.

 

COL_UNIQUE_NULL은 NULL 허용 컬럼이기는 하지만 UNIQUE 제약조건이 붙었으므로 중복 입력되지 않아야 하는데 입력되었다.

NULL은 값이 없음을 의미하므로, UNIQUE 비교 대상에서 NULL은 제외된다.