라일락 꽃이 피는 날

[Oracle] 제약 (constraint) 2 본문

프로그래밍/Oracle

[Oracle] 제약 (constraint) 2

eunki 2022. 6. 14. 17:41
728x90

예제 1. 사원 테이블의 월급이 0~9000 사이의 데이터만 입력 또는 수정되게끔 check 제약 걸기

alter table emp
    add constraint emp_sal_ck check(sal between 0 and 9000);

 

 

 

예제 2. email 에 체크 제약을 거는데, 이메일에 @ 와 . 이 없으면 에러가 나게끔 제약 걸기

alter table emp
    add constraint emp_email_ck check(email like '%@%.%');
alter table emp
    add constraint emp_email_ck check(email like '%@%' and email like '%.%');

 

 

 

예제 3. 통신사 컬럼에 제약을 거는데 데이터가 sk, lg, kt 만 입력 또는 수정되게끔 제약 걸기

alter table emp
    add constraint emp_telecom_ck check(telecom in ('sk', 'lg', 'kt'));

 

 

 

dept 테이블의 deptno 에 primary key 제약을 걸고 emp 테이블의 deptno 에 foreign key 제약을 걸면

emp 테이블의 deptno 에 데이터를 입력할 때, dept 테이블에 존재하는 deptno 에 대한 데이터만 입력 또는 수정할 수 있다.

 

dept 테이블의 데이터를 지울 때 emp 테이블에 관련된 부서 번호가 있다면, 해당 부서 번호는 에러가 나면서 지워지지 않는다.

자식 테이블인 emp 테이블에 해당 부서 번호가 없어야만 지워진다.

 

 

 

예제 4. dept 테이블의 deptno 에 primary key 제약 걸기

alter table dept
    add constraint dept_deptno_pk primary key(deptno);

 

 

 

예제 5. emp 테이블의 deptno 에 foreign key 제약을 걸면서 dept 테이블의 deptno 를 참조

alter table emp
    add constraint emp_deptno_fk foreign key(deptno) references dept(deptno);

이렇게 하게 되면 dept 테이블은 부모 테이블이 되고, emp 테이블은 자식 테이블이 된다.

 

 

 

예제 6. KING 의 부서 번호를 70번으로 변경

update emp
    set deptno = 70
    where ename = 'KING';

무결성 제약조건(C##SCOTT.EMP_DEPTNO_FK)이 위배되었습니다- 부모 키가 없습니다.

위의 update 문은 dept 테이블의 deptno 에 70번이 없기 때문에 에러가 난다.

 

 

 

예제 7. 부서 테이블에서 부서 번호 10번 행을 삭제

delete dept
    where deptno = 10;

무결성 제약조건(C##SCOTT.EMP_DEPTNO_FK)이 위배되었습니다- 자식 레코드가 발견되었습니다.

자식 테이블에 부서 번호 10번이 존재하기 때문에, 부모 테이블인 dept 테이블의 10번 데이터를 함부로 삭제할 수 없다.

728x90