테이블 제약조건
- 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 여러가지 규칙을 적용해 놓는 것
- 간단하게 말하면 테이블 안에서 데이터의 성격을 정의하는 것.
제약조건 종류
1) NOT NULL
- 해당 컬럼을 필수로 값을 가져야한다.
- Null 불가능
2) UNIQUE (Unique key)
- 고유키
- 테이블 내에서 유일해야함 (중복 X)
- 자동으로 Index가 생성
- Null 입력 가능
- 한 테이블에 여러개 선언이 가능
ALTER TABLE EMP2
ADD CONSTRAINT EMP2_UK_DEPTNO UNIQUE(deptno);
ALTER TABLE EMP2
DROP CONSTRAINT EMP2_UK_DEPTNO;
3) PK (Primary key)
- 기본키
- 한 테이블에 1개씩만 선언 가능
- UNIQUE + NOT NULL 의 결합과 같음
- 테이블 내에서 유일해야함 (중복 X)
- 자동으로 Index가 생성
- Not Null
- 해당 Row를 대표하는 컬럼 => 다른 테이블에서 FK로 참조 가능
CREATE TABLE EMP5(
empno NUMBER CONSTRAINT EMP5_PK_EMPNO PRIMARY KEY
);
ALTER TABLE EMP5
ADD CONSTRAINT EMP5_PK_EMPNO PRIMARY KEY (empno);
4) FK (Foreign key)
- 기본키를 참조하는 컬럼
- 참조 무결성 (참조하는 기본키 컬럼과 데이터타입이 일치해야 한다.)
- 옵션
- on update cascade : 참조하는 기본키가 수정될 경우 같이 수정
- on delete cascade : 참조하는 기본키가 삭제될때 같이 삭제 (해당 옵션이 없는 경우 참조키 삭제 불가능)
5) CHECK
- 컬럼의 값을 특정 범위로 제한
- 데이터의 무결성을 유지하기 위해 특정 컬럼에 적용되는 제약
ALTER TABLE EMP2
ADD CONSTRAINT EMP2_CK_COMM CHECK (comm >= 1 AND comm <= 100);
ALTER TABLE EMP2 DROP CONSTRAINT EMP2_CK_COMM;
ALTER TABLE EMP2
ADD CONSTRAINT EMP2_CK_COMM2 CHECK comm IN (10000,20000,30000,40000,50000);
⭐️ 참조 무결성 규정
1) Delete(or Modify) Action
create table 테이블명(
컬럼 데이터타입 references 참조테이블(참조컬럼) on [delete/update] 옵션,
...
);
| 규정 | 설명 |
|---|
| Cascade | 참조하는 데이터가 삭제된 경우 같이 삭제 |
| Set Null | 참조하는 데이터가 삭제된 경우 해당 컬럼 값을 Null로 변경 |
| Set Default | 참조하는 데이터가 삭제시 해당 필드 Default값으로 변경 |
| Restrict | 해당 테이블에 PK가 없는 경우에만 참조하는 데이터 삭제 허용 |
| No Action | 참조무경설을 위반하는 삭제/수정 액션을 취하지 않음 |
2) Insert Action
create table 테이블명(
컬럼 데이터타입 references 참조테이블(참조컬럼) on insert 옵션,
...
);
| 규정 | 설명 |
|---|
| Automatic | 참조하는 데이터가 없는 경우 참조테이블에 PK를 생성후 insert |
| Set Null | 참조하는 데이터가 없는 경우 해당 컬럼 값을 Null로 insert |
| Set Default | 참조하는 데이터가 없는 경우 해당 필드 Default값으로 insert |
| Dependent | 해당 테이블에 PK가 있는 경우에만 데이터 insert |
| No Action | 참조무경설을 위반하는 insert 액션을 취하지 않음 |