본문 바로가기
oracle/[SQL] SQL

8장. 제약조건

by #moonyz 2014. 10. 6.

- 테이블에 올바른 데이터만 입력받고 잘못된 데이터는 들어오지 못하도록 컬럼마다 정하는 규칙

EX) 학번 컬럼은 중복되지 않게, 학년 컬럼에는 1~3까지만 입력될수 있게

- 제약조건들은 필요에 의해 사용할 수도 있고 일시적으로 사용안할 수도 있음.

- 중복으로 설정 가능 (하나의 제약조건을 여러컬럼에, 하나의 컬럼에 여러개의 제약조건을)





1. 제약조건의 종류

NOT NULL

- 이 조건이 설정 된 컬럼에는 null 값이 입력되지 못함

UNIQUE

- 이 조건이 설정 된 컬럼에는 중복된 값이 입력되지 못함 

- 각 컬럼값의 내용을 다 알고 있어야 함 -> 인덱스 필요

PRIMARY KEY  

- 이 조건은 NOT NULL + UNIQUE 의 의미를 가진다.

- 테이블 내에서 데이터들끼리의 유일성을 보장하는 컬럼에 설정가능

- 테이블 당 1개만 설정할수 있음

FOREIGN KEY 

- 이 조건은 다른 테이블(부모테이블)의 컬럼을 참조해서 무결성 검사를 한다. 

- Foreign Key : 자식테이블 쪽 컬럼에 설정 되는 제약조건 

- Reference Key : 부모테이블 쪽 컬럼에 설정되는 제약조건

- ON DELETE CASCADE : 부모테이블의 데이터가 지워지면 자식테이블의 데이터도 함께 지우라는 의미

ON DELETE SET NULL : 부모테이블의 데이터가 지워질 경우 자식테이블의 값을 null로 설정하라는 뜻 

CHECK

이 조건으로 설정된 값만 입력을 허용하고 나머지는 거부함. 





2. 각 제약 조건의 설정 방법

- 제약조건의 이름을 지정하거나 지정하지 않고 설정하는 방법이 있음

- 제약 조건의 관리작업을 하려면 해당 제약조건의 이름을 알고있어야 하기 때문에 이름을 지정하는것을 추천!

# 테이블 생성시 동시에 제약조건 설정하기


# 테이블 생성 후 제약조건 추가하기

- ALTER 명령어로 add constraint 해주면 됨

- null <-> not null로 변경하는 것은 이미 기본값으로 null이 설정되어 있기때문에 수정(modify)해줘야함


# 참조키 제약조건 설정 하기

emp3테이블의 no컬럼에 참조키제약조건 설정 + emp2테이블의 empno컬럼 참조

emp3 : 자식테이블 / emp2 : 부모테이블

부모테이블 쪽에 설정되는 컬럼이 primary key 거나 unique key로 설정되어 있어야 함




※ 자식 테이블이 부모테이블을 참조하고 있을 경우 삭제 불가능 > 이럴 경우를 대비해서 FOREIGN KEY생성시 주는 옵션

① ON DELETE CASCADE

- 부모테이블의 데이터가 지워지면 자식테이블의 데이터도 함께 지우라는 뜻


② ON DELETE SET NULL

- 부모테이블의 데이터가 지워지면 자식테이블의 값을 NULL로 설정하라는 뜻

- 자식테이블의 컬럼이 NOT NULL 제약조건이 설정되어 있으면 삭제 불가능!




3. 제약조건 관리하기

 - 테이블의 컬럼에 설정되는 각 제약조건들은 어떤 필요에 의해서 일시적으로 DISABLE / ENABLE 할수 있음.

10g까지 : disable validate = read only

11g부터 : read only


제약조건 disable 하기

- novalidate : 해당 제약조건이 없어서 데이터가 전부 들어온다는 뜻

- validate


# 제약조건 enable 하기

- novalidate : enable 하는 시점까지 테이블에 들어있는 데이터는 검사하지 않고 이후부터 들어오는 데이터만 제약조건 적용

- validate : enable하는 시점까지 테이블에 입력되어 있던 모든 데이터를 전부 검사하며 신규로 입력되는 데이터도 전부 검사



. 제약조건 조회하기

- user_constraints : 테이블에 설정되어 있는 제약조건 조회

- user_cons_columns : 특정 테이블의 특정 컬럼에 설정되어있는 모든 제약조건 보기 



'oracle > [SQL] SQL' 카테고리의 다른 글

10장. VIEW  (1) 2014.10.07
9장. 인덱스(Index)  (1) 2014.10.07
7장. DML  (0) 2014.10.06
6장. DDL  (0) 2014.10.02
5장. JOIN  (0) 2014.10.02

댓글