[SQLD] 제약조건 (Constraints)

yjkim97·2023년 8월 28일

자격증

목록 보기
12/24
post-thumbnail

테이블 제약조건

  • 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 여러가지 규칙을 적용해 놓는 것
  • 간단하게 말하면 테이블 안에서 데이터의 성격을 정의하는 것.

제약조건 종류

1) NOT NULL

  • 해당 컬럼을 필수로 값을 가져야한다.
  • Null 불가능

2) UNIQUE (Unique key)

  • 고유키
  • 테이블 내에서 유일해야함 (중복 X)
  • 자동으로 Index가 생성
  • Null 입력 가능
  • 한 테이블에 여러개 선언이 가능
-- EMP2 테이블을 생성한 뒤, ALTER 를 이용해서 제약조건을 추가해준다. (제약조건명 : EMP2_UK_DEPTNO)
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로 참조 가능
-- PRIMARY KEY 생성 예제. 제약조건명 EMP5_PK_EMPNO
CREATE TABLE EMP5(
    empno NUMBER CONSTRAINT EMP5_PK_EMPNO PRIMARY KEY
);

-- 테이블 생성 후 ALTER 명령어로 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

  • 컬럼의 값을 특정 범위로 제한
  • 데이터의 무결성을 유지하기 위해 특정 컬럼에 적용되는 제약
-- EMP2 테이블의 comm 컬럼이 1~100 까지의 값만 가질 수 있도록 체크 제약조건 생성.
ALTER TABLE EMP2
ADD CONSTRAINT EMP2_CK_COMM CHECK (comm >= 1 AND comm <= 100);

-- 제약조건 삭제
ALTER TABLE EMP2 DROP CONSTRAINT EMP2_CK_COMM;

-- 10000, 20000, 30000, 40000, 50000 의 값만을 가질 수 있는 체크 제약조건 생성.
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 액션을 취하지 않음
profile
어제는 🐸두꺼비 오늘은 😄YJ

0개의 댓글