SQL 제약조건 / 참조 무결성 규정 관련 옵션

Gaeun·2022년 10월 20일
0

SQL CONSTRAINT(제약조건)

  • 데이터에 관한 규칙을 지정하는데 사용
  • 테이블에 저장될 데이터의 무결성, 즉 데이터의 정확성과 일관성을 유지하기 위함
  • 데이터에 결손과 부정합이 없음을 보증하기 위해 해놓는 장치
  • 테이블 생성 시 정의해야 할 필수 요소는 아니지만 데이터가 많이 쌓인 후에 정의하려고 하면 골치 아파지므로 초기에 정의해주는 것이 바람직함
  • CONSTRATINT 뒤에 제약조건의 ID를 부여할 수 있음
  • CONSTRATINT를 생략할 시 제약 ID를 자동으로 시스템에서 생성해 줌

1. 제약조건의 종류

  • PRIMARY KEY(기본키)

    • 테이블에 저장된 각각의 Row에 대한 고유성을 보장한다.
    • 한 테이블에 한 개씩만 정의할 수 있다.
    • 생성하지 않는 것도 가능하다.
    • PK(PRIMARY KEY)로 지정된 컬럼에는 NULL 값이 입력될 수 없고 자동으로 UNIQUE 인덱스로 생성된다.
  • FOREIGN KEY(외래키)

    • 하나의 테이블이 다른 테이블을 참조하고자 할 때 FK(FOREIGN KEY)를 정의해준다.
    • NULL 값을 가질 수 있다.
    • 한 테이블에 여러 개 존재할 수 있다.
  • UNIQUE KEY(고유키)

    • PRIMARY KEY와 유사하게 테이블에 저장된 각각의 Row에 대한 고유성을 보장하기 위한 제약조건이지만 NULL값이 허용된다는 차이점이 있다.
  • NOT NULL

    • 해당 컬럼에서 NULL 값이 입력되는 것을 허용하지 않는 제약조건이다.
  • CHECK

    • 컬럼에 저장될 수 있는 값의 범위를 제한한다.
    • 컬럼의 값이 특정 조건을 만족하는지 확인한다.
    • 데이터의 무결성을 유지하기 위하여 테이블의 특정 컬럼에 설정한다.
      ex) DEL_YN(삭제여부) 칼럼에 'Y'나 'N'만 입력될 수 있도록 CHK_DEL_YN이란 이름의 제약조건을 정의한다.
      CONSTRAINT CHK_DEL_YN CHECK(DEL_YN IN('Y', 'N'))
  • CREATE INDEX

    • 데이터베이스에서 데이터를 매우 빠르게 생성하고 검색하는 데 사용한다.

2. 제약 변경

  • 제약 추가

    ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건(컬럼명);
  • 제약 수정

    ALTER TABLE 테이블명 MODIFY 컬럼명 컬럼조건; 
  • 제약 삭제

    ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;

3. 제약 활성 / 비활성

  • 제약 활성
 ALTER TABLE 테이블명 ENABLE CONSTRAINT 제약조건; 
  • 제약 비활성
 ALTER TABLE 테이블명 DISABLE CONSTRAINT 제약조건;

4. 참조 무결성 규정 관련 옵션

Delete(Modify) Action

  • CASCADE: Parent 값 삭제 시 Child 값 같이 삭제
  • SET NULL: Parent 값 삭제 시 Child의 해당 컬럼(필드) NULL 처리
  • SET DEFAULT: Parent 값 삭제 시 Child의 해당 컬럼 DEFAULT 값으로 변경
  • RESTRICT: Child 테이블에 해당 데이터가 PK로 존재하지 않는 경우에만 Parent값 삭제 및 수정 가능
    -NO ACTION: 참조 무결성 제약이 걸려있는 경우 삭제 및 수정 불가

Insert Ation

  • AUTOMATIC: Parent 테이블에 PK가 없는 경우 Parent PK를 생성 후 Child 입력
  • SET NULL: Parent 테이블에 PK가 없는 경우 Child 외부 키를 NULL 값으로 처리
  • SET DEFAULT: Parent 테이블에 PK가 없는 경우 Child 외부 키를 지정된 기본값(DEFAULT 값)으로 입력
  • DEPENDENT: Parent 테이블에 PK가 존재할 때만 Child 입력 허용
  • NO ACTION: 참조 무결성을 위반하는 입력 액션을 취하지 않음

참고 자료

profile
🌱 새싹 개발자의 고군분투 코딩 일기

0개의 댓글