SQL 제약조건

Kim Dong Kyun·2023년 1월 12일
1

Today I learned

목록 보기
31/43

개요

SQL 테이블의 특정 값들은 Primary key로써 관리되어야 한다거나, 다른 테이블과 관계 맺을 Fpreign key가 존재한다거나, null값이 들어가면 안되거나...등등 많은 조건들을 가진다. SQL에서 설정할 수 있는 제약조건들을 간단히 알아보고 정리한다.

PK, FK

출처

위는 PK와 FK의 차이점이다.

번역본

FK로 연결된 테이블의 데이터 무결성 관리

위와 같이 일대다 (PK-FK) 관계를 맺은 상태에서 회원 테이블의 mem_id(PK)를 변경하려고 한다면 어떻게될까?

  • 따로 설정해놓은 바가 없다면, 오류를 뱉는다.
    -> 왜냐면, 구매 테이블이 실제로 참조하고 있는 PK의 값이 변한다면 PK와 연결되어 있는 FK들이 고아가 된다. 실제 매치가 안된다. 따라서 SQL에서는 이런 경우에 데이터 변경을 허용하지 않는다.

그렇다면 저놈들은 생기면 절대 못바꾸고, 삭제도 못햬? 테이블째로 날려버려야 하나?

  • ㄴㄴ

CASCADE의 등장

스프링에서 자주 사용했던 CASCADE, 영속성 전이 키워드가 등장한다. 실제 사용 예는 다음과 같다.

위 사진에서 나온 바와 같이 cascade를 두가지 조건으로 걸 수 있다.

1. on update cascade

  • 부모 테이블의 PK의 변경이 update 되면, (on update,) cascade로 자식 테이블도 변경을 감지해서 변경되는 SQL문이다.

2. on delete cascade

  • 위와 같이 작동된다.

더불어 이 두 친구들은 foreign key "아래에" (뭐 혹은 옆에) 써주면 된다.

기타 제약조건

Spring에서 Column들의 제약조건을 설정했을 때 사용했었던 반가운 얼굴들이 쓰인다.

  1. null / not null

테이블_명 타입 null / not null 과 같이 쓰인다

-> ex) mem_name varchar(8) not null

  1. unique

테이블_명 타입 unique

-> ex) email char(8) unique

  1. unsigned

int의 표현범위 : –2,147,483,648 ~ 2,147,483,647
unsigned 가 적용되면 이 값의 범위는 같으나, 0부터 시작한다.(음수 X)
unsigned int의 표현범위 : 0 ~ 4,294,967,295

-> ex) tinyint unsigned

위와 같이 적용된다.

  1. check

check로 설정한 조건 안에 있는 값들만 입력받을 수 있다.

-> ex) height tinyint unsigned null check (height >= 100),

  1. default

값이 들어오지 않았을 때 자동으로 입력될 값을 지정한다.

-> ex) phone_num char(3) default '02'

0개의 댓글