- 테이블에 올바른 데이터만 입력받고 잘못된 데이터는 들어오지 못하도록 컬럼마다 정하는 규칙
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 : 특정 테이블의 특정 컬럼에 설정되어있는 모든 제약조건 보기
댓글