Building value

Oracle SQL 기본 문법[CONSTRAINT(2)] 본문

RDBMS/Oracle DB

Oracle SQL 기본 문법[CONSTRAINT(2)]

developer_Michael 2023. 3. 17. 18:28
반응형

4. UNIQUE

 

Oracle SQL에서 UNIQUE는 특정 칼럼이나 칼럼의 조합이 중복되지 않도록 제약을 거는 것입니다.

 

즉, 해당 칼럼(들)에는 유일한(unique) 값만 입력할 수 있습니다.

CREATE TABLE DEPT (
  DEPTNO NUMBER(2) CONSTRAINT DEPT_DEPTNO_PK PRIMARY KEY,
  DNAME VARCHAR2(14) CONSTRAINT DEPT_DNAME_NN NOT NULL,
  LOC VARCHAR2(13),
  CONSTRAINT DEPT_DNAME_UK UNIQUE(DNAME)
);

위에서 생성한 테이블 DEPT의 DNAME 칼럼에는 NOT NULL 제약 조건과 UNIQUE 제약 조건이 설정되어 있습니다. 

 

따라서 DNAME 컬럼에는 NULL 값을 저장할 수 없으며, 중복된 값을 저장할 수 없습니다.

 

따라서 INSERT문 실행 시 DNAME 칼럼에 이미 존재하는 값을 저장하거나, 

 

DNAME 컬럼에 NULL 값을 저장하려고 하면 에러가 발생합니다. 

 

아래는 에러가 발생하는 예시 쿼리입니다.

-- 이미 존재하는 값을 저장하는 경우
INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (20, 'ACCOUNTING', 'DALLAS');

-- NULL 값을 저장하는 경우
INSERT INTO DEPT (DEPTNO, LOC) VALUES (30, 'CHICAGO');

 

5. CHECK

 

CHECK는 해당 칼럼의 데이터 값이 특정 조건을 만족해야 한다는 제약 조건을 설정하는 것입니다. 

 

이를 통해 데이터의 유효성을 보장하고 데이터의 일관성을 유지할 수 있습니다.

예를 들어, 다음과 같은 EMP 테이블이 있다고 가정해 봅시다.

CREATE TABLE EMP (
  EMPNO NUMBER(4) CONSTRAINT EMP_EMPNO_PK PRIMARY KEY,
  ENAME VARCHAR2(10) CONSTRAINT EMP_ENAME_NN NOT NULL,
  JOB VARCHAR2(9),
  MGR NUMBER(4),
  HIREDATE DATE,
  SAL NUMBER(7,2),
  COMM NUMBER(7,2),
  DEPTNO NUMBER(2) CONSTRAINT EMP_DEPTNO_FK REFERENCES DEPT(DEPTNO),
  CONSTRAINT EMP_SAL_CHK CHECK(SAL >= 500)
);

위의 예제에서 EMP 테이블의 SAL 칼럼에 CONSTRAINT CHECK를 설정하여 

 

SAL 값이 500 이상이어야 한다는 조건을 만들었습니다. 

 

이를 통해 잘못된 데이터의 입력을 방지할 수 있습니다.

반응형

'RDBMS > Oracle DB' 카테고리의 다른 글

Oracle SQL 기본 문법[CONSTRAINT(1)]  (0) 2023.03.17
Oracle SQL 기본 문법[TCL.트랜잭션]  (0) 2023.03.17
Oracle SQL 기본 문법[DELETE]  (0) 2023.03.17
Oracle SQL 기본 문법[UPDATE]  (0) 2023.03.16
Oracle SQL 기본 문법[INSERT]  (0) 2023.03.16