SQLD
제약조건 (constraint)
spring_sunshine
2023. 8. 22. 18:05
제약조건
- 데이터의 무결성을 지키기 위해 데이터를 입력받을 때 실행되는 검사 규칙을 의미한다.
- 제약조건은 CREATE문으로 테이블을 생성할 때나 ALTER문으로 칼럼을 추가할 때도 설정할 수 있다.
데이터 무결성을 위해 사용하는 제약조건은 다음과 같다.
- NOT NULL: NULL 허용x
- UNIQUE: 중복된 값 허용x
- PRIMARY KEY: NOT NULL && UNIQUE
- FOREIGN KEY: 참조되는 테이블에서 칼럼 값이 존재하면 허용
- CHECK: 데이터 값의 범위나 조건을 지정하여 설정한 값만을 허용
- DEFAULT: 값이 추가되지 않을 때 기본 값을 명시
FOREIGN KEY (외래키)
- 한 테이블을 다른 테이블과 연결해주는 역할을 하므로, 외래키 제약조건은 하나의 테이블을 다른 테이블에 의존하게 만든다.
- 이때 참조하는 부모테이블의 값은 반드시 PRIMARY KEY나 UNIQUE 제약조건이 붙어있어야 한다.
1) 처음부터 자식테이블(Orders)에 FK 정의
CHILD의 FK와 PARENT의 PK의 이름은 동일하게 하는 것이 좋다.
CREATE TABLE Orders(
order_ID int NOT NULL,
order_num int NOT NULL,
custormer_ID int,
PRIMARY KEY(order_ID),
FOREIGN KEY(customer_ID) REFERENCES Customer(customer_ID)
);
2) FK 제약조건에 이름을 붙이고, 여러 칼럼을 FK로 지정하려는 경우
CREATE TABLE Orders(
order_ID int NOT NULL,
order_num int NOT NULL,
custormer_ID int,
PRIMARY KEY(order_ID),
CONSTRAINT Orders_FK FOREIGN KEY(customer_ID)
REFERENCES Customer(customer_ID)
[ON DELETE | ON UPDATE]
);
3) 이미 정의된 자식테이블에서 PK, FK를 추가하는 경우
ALTER TABLE CHILD ADD CONSTRAINT C_PK PRIMARY KEY(C_ID);
ALTER TABLE CHILD ADD CONSTRAINT C_FK FOREIGN KEY(P_ID) REFERENCES PARENT(P_ID);
ALTER TABLE CHILD ADD CONSTRAINT C_FK FOREIGN KEY(P_ID) REFERENCES PARENT(P_ID) ON DELETE CASCADE;
4) 부모테이블에서 PK를 DELETE하지 못하는 경우 (자식테이블의 FK로 설정)
DELETE FROM PARENT WHERE P_ID='A';
ALTER TABLE CHILD DROP CONSTRAINT C_FK;
ALTER TABLE CHILD ADD CONSTRAINT C_FK FOREIGN KEY(P_ID) REFERENCES PARENT(P_ID) ON DELETE CASCADE;
ON DELETE / ON UPDATE
외래키 지정 시 부모 테이블의 값이 삭제/수정되는 경우, 자식 테이블에서 참조하는 필드를 어떻게 동작하게 만들지 지정할 수 있다.
- CASCADE: PARENT 삭제/수정 시 CHILD도 함께 삭제/수정
- SET NULL: PARENT 삭제/수정 시 CHILD의 해당 필드 NULL로 업데이트
- SET DEFAULT: PARENT 삭제/수정 시 CHILD의 해당 필드 기본값으로 업데이트
- RESTRICT: CHILD에 PK 값이 없는 경우에만 PARENT 삭제 허용
- DEPENDENT: PARENT에 PK가 있는 경우에만 CHILD 입력 허용
- AUTOMATIC: PARENT에 PK가 없는 경우 PARENT의 PK를 생성 후 CHILD 입력