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
'DataBase > Oracle' 카테고리의 다른 글
[Oracle] 오라클 제약조건 : CHECK (1) | 2023.09.20 |
---|---|
[Oracle] 오라클 제약조건 : 기본키 (0) | 2023.09.20 |
[Oracle] 오라클 제약조건 : NOT NULL (1) | 2023.09.18 |
[Oracle] 오라클(Oracle) 데이터 타입 ( 문자, 숫자, 날짜, LOB ) (2) | 2023.09.13 |
[Oracle] 오라클(Oracle) 테이블 생성 (5) | 2023.09.13 |