Database

11.21.(월) OracleDB(9): 제약조건

콜라든포비 2022. 11. 22. 22:54

제약조건

각 칼럼마다 제약조건을 걸어서 부적절한 데이터가 입력되는걸 방지할 수 있다.

이전에 설정했던 PRIMARY KEY, NOT NULL 이러한 성질들이 제약조건이다.

제약조건을 만들때 이름을 설정할 수 있으며, 의미있게 짓는다면 쉽게 참조할 수 있다.

테이블 생성 시에 지정할 수 있고, 생성 후에 ALTER/DELETE를 통해 수정/삭제할 수도 있다.

기존의 필드에 제약조건을 추가할 땐, 해당 필드도 만족하는 조건으로 추가해야한다.

내가 지정한 제약조건은

-- 현제 계정에 설정된 제약조건 확인하기
SELECT * FROM user_constraints;

이렇게 확인할 수 있다.

NOT NULL

칼럼을 필수 필드화시킬때 사용한다.

-- ename을 not null 제약조건 걸기
ALTER TABLE emp MODIFY(ename CONSTRAINT emp_nn_ename NOT NULL);

UNIQUE

데이터의 유일성을 보장해준다. 중복데이터를 추가할 수 없다.

ALTER TABLE emp
ADD CONSTRAINT emp_uniq_deptno UNIQUE(deptno);	-- ERROR : deptno는 이미 중복되는 값이 존재함
SELECT * FROM dept;
ALTER TABLE dept
ADD CONSTRAINT dept_uniq_deptno UNIQUE(deptno);

PRIMARY KEY

NOT NULL과 UNIQUE의 조합이다.

앞서 말했듯이 PRIMARY KEY는 데이터를 대표하는 필드로 그 역할을 수행한다. 그렇기에 다른 테이블과 연결시킬 때 PRIMARY KEY를 통해 데이터를 주고받는다.

ALTER TABLE dept
ADD CONSTRAINT dept_pk_deptno PRIMARY KEY(deptno);

실습테이블의 isbn, pubcode, authorcode는 이미 PRIMARY KEY로 만들어져있는 상태이다.

CHECK

데이터값 범위를 제한한다.

-- emp테이블의 sal값을 800~6000 사이로 정하라
ALTER TABLE emp ADD CONSTRAINT emp_ck_sal CHECK(sal>=800 AND sal<=6000);

DEFAULT

필드의 기본값을 지정한다. 필드에 데이터를 입력하지 않았을 때 기본값이 입력된다.

ALTER TABLE emp MODIFY(hiredate DATE DEFAULT SYSDATE);

FOREIGN KEY

제약조건 중 가장 중요한 FOREIGN KEY는 다른 테이블의 PRIMARY KEY를 참조하는 필드이다.

ALTER TABLE emp ADD CONSTRAINT emp_fk_deptno
FOREIGN KEY(deptno) REFERENCES dept(deptno)

이렇게 emp테이블이 deptno테이블을 공통의 deptno 필드를 통해 참조할 수 있게 되었다.

외래키에 의해 참조되고 있는 기본키는 삭제할 수 없다.

하지만 ON DELETE CASCADE를 통해 기본키를 삭제할때, 해당 기본키를 참조하고 있는 외래키의 데이터도 같이 삭제할 수 있다.

user_constraints테이블의 DELETE_RULE 필드가 이를 의미한다.

ALTER TABLE emp ADD CONSTRAINT emp_fk_deptno
FOREIGN KEY(deptno) REFERENCES dept(deptno) ON DELETE CASCADE;

 

이제 이 제약조건, 특히 외래키의 개념을 가진 채로 실습테이블로 넘어가자.