[Database] TIL 8(211202)ㅣPostgreSQL실습: Constraint(NOT NULL, UNIQUE, PREMARY KEY, FOREIGN KEY, CHECK)

Choi Song Yi·2021년 12월 2일
0

TIL

목록 보기
3/4

[TIL6] 끝부분에서 언급했던 '데이터 무결성'을 위한 5가지 제약조건을 알아보자.

제약조건의미
NOT NULL레코드가 없으면 안된다는 의미, 회원가입할 때, '필수 입력 사항'같은 것
UNIQUE유일한 레코드여야한다는 의미, 중복확인이 필수인 아이디 입력 사항에 필요한 것.
PRIMARY KEY테이블 대표 컬럼, NOT NULL&UNIQUE 해야 함.
FOREIGN KEY'참조하는 테이블에서 존재하는 값만 사용 가능'을 의미.
CHECK조건을 만족하는 값만 입력 가능하다는 의미.

참고 블로그


NOT NULL

CREATE TABLE contact_info(
cont_id NUMERIC(3) NOT NULL,
name VARCHAR(15) NOT NULL
);

  • cont_id와 name은 필수 입력사항인 테이블이 생성된다.

UNIQUE

DROP TABLE IF EXISTS contact_info;
CREATE TABLE contact_info(
name VARCHAR(3) UNIQUE NOT NULL,
tel INTEGER NOT NULL,
tel INTEGER NOT NULL,
email VARCHAR
);

  • 똑같은 name을 가진 레코드를 입력하면 안되는 테이블이 생성된다.

CREATE TABLE subject(
subj_id NUMERIC(5) PRIMARY KEY,
subj_name VARCHAR(20) NOT NULL,
stud_count NUMERIC(20) NOT NULL,
UNIQUE(subj_id, subj_name)
);

  • 위와 같이 여러 컬럼을 동시에 유니크 제약조건을 설정할 수 있다.
    UNIQUE(컬럼명1, 컬럼명2)

PRIMARY KEY

CREATE TABLE contact_info)
cont_id SERIAL PRIMARY KEY,
name VARCHAR(15) NOT NULL
);

  • cont_id가 PRIMARY KEY가 되며, 이 컬럼값은 NOT NULL과 UNIQUE조건을 모두 충족해야 한다.

FOREIGN KEY

CREATE TABLE teacher(
teac_id NUMERIC(5) PRIMARY KEY,
teac_name VARCHAR(20) NOT NULL,
subj_id NUMERIC(5) REFERENCES subject,
teac_certifi_date DATE
);

(1) 외래키 지정X,
UNIQUE에서 언급한 테이블 subject의 컬럼 subj_id를 참조한다고 한다면, 컬럼명이 같기 때문에 바로 'REFERENCES 테이블명'만 뒤에 붙이면 된다.

CREATE TABLE teacher(
teac_id NUMERIC(5) PRIMARY KEY,
teac_name VARCHAR(20) NOT NULL,
subj_code NUMERIC(5) NOT NULL,
subj_name VARCHAR(60) NOT NULL,
FOREIGN KEY (subj_code, subj_name) REFERENCES subject(subj_id, subj_name)
);

(2) 외래키 지정O
subj_code는 subj_id를 참조하는 것과 같이 순서대로 매핑된다.

특징

  • 여러개의 컬럼에 적용 가능하다.
  • 부모 테이블은 자식 테이블보다 먼저 삭제될 수 없다.
    (부모테이블: 참조되는 테이블, 자식테이블: 참조하는 테이블)
  • 참조하는 컬럼끼리는 데이터 타입이 같아야 한다.

그렇다면 어떻게 참조 테이블을 제거해야할까?

- On Delete 사용

  1. ON DELETE CASCADE: 부모 데이터를 삭제하면 자식 데이터도 삭제된다.

    teacher테이블의 subj_id가 참고하고 있는 subject 부모 테이블 뒤에 ON DELETE CASCADE를 추가하면,


자식 테이블 teacher에서 subj_id=2인 레코드가 삭제된다.

  1. ON DELETE SET NULL: 부모 데이터를 삭제하면 자식 테이블의 참조 컬럼값을 NULL로 바꾼다.

    REFERENCES 부모 테이블명 뒤에 ON DELETE SET NULL 추가.


자식 테이블 teacher에서 subj_id=2였던 값이 NULL이 됐다.

  1. ON DELETE SET DEFAULT: 부모 데이터를 삭제하면 자식 테이블의 참조 컬럼을 설정된 DEFAULT 값으로 바꾼다.

    DEFAULT를 1로 설정하고 ON DELETE SET DEFAULT를 추가한다.


자식 테이블 teacher에서 삭제한 레코드값이 DEFAULT값인 1로 바꼈다.

CHECK

CHECK 명령어 뒤에 나오는 식이 BOOLION 타입의 TRUE를 만족해야한다.

  • 주문량(order_qty컬럼에는 0보다 큰 값만 삽입할 수 있다.)
profile
2021.11.22 ~ 국비지원과정 수강ing

0개의 댓글