DataBase/Oracle

[Oracle] 오라클 제약조건 : UNIQUE

h0-0cat 2023. 9. 18. 16:02
728x90

오라클 제약조건 : UNIQUE

제약조건 Constraints은

컬럼에 대한 속성 형태로 정의하지만 엄연히 오라클 데이터베이스 객체 중 하나이며,

데이터 무결성을 보장하기 위한 용도로 사용된다.

 

제약조건에는 NOT NUL, UNIQUE, 기본키, 외래키, CHECK등이 있다.

 


 

UNIQUE

 

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

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

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

 

UNIQUE 제약조건 역시 데이터베이스 객체이므로, 컬럼 정의 부분에 UNIQUE를 명시하거나 별도로 CONSTRAINTS 키워드를 사용해 정의할 수 있다.

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

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

 

 

입력

CREATE TABLE EX01_2 (
	H_UNIQUE_NULL VARCHAR2(10),
    H_UNIQUE_NOT_NULL VARCHAR2(10) NOT NULL,
    H_UNIQUE	VARCHAR2(10),
    CONSTRAINTS UNIQUE_NM1 UNIQUE (H_UNIQUE)
);

결과

TABLE EX01_2이 생성되었습니다.

 

입력

SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME, SEARCH_CONDITION
FROM USER_CONSTRAINTS
WHERE TABLE_NMAE = 'EX01_2';

결과

CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME SEARCH_CONDITION
--------------- --------------- ---------- ----------------
SYS_C0011299	C	EX01_1	"H_NOT_NULL" IS NOT NULL
SYS_C0011300	U	EX01_1	
SYS_C0011301	U	EX01_1	
UNIQUE_NM1	    U	EX01_1

 

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

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

 

데이터 입력

 

입력

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

결과

1개 행이 삽입되었습니다.

 

입력

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

 

결과

 

SQL 오류: ORA-00001: 무결성 제약 조건(ORA_USER.SYS_C0011300)에 위배됩니다.

 

입력

INSERT INTO EX01_2 VALUES ('', 'BB', 'BB');

 

결과

1개 행이 삽입되었습니다.

 

H_UNIQUE_NULL 컬럼에 NULL이 성정적으로 입력되었습니다.

 

입력

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

 

결과

1개 행이 삽입되었습니다.

 

H_UNIQUE_NULL은 NULL 허용 컬럼이기는 하지만 UNIQUE 제약조건이 붙었으므로 중복 입력되지 않아야 하는데 입력되었다. NULL은 값이 없음을 의미하므로, UNIQUE 비교 대상에서 NULL은 제외된다는 점을 기억해 두자.

 

 

728x90