기록이 힘이다.

[혼공 SQL] 제약조건으로 테이블을 견고하게 본문

SQL

[혼공 SQL] 제약조건으로 테이블을 견고하게

dev22 2022. 12. 13. 18:04
728x90

제약조건의 기본 개념과 종류

테이블을 만들 때는 테이블의 구조에 필요한 제약조건을 설정해줘야 합니다. 앞에서 확인한 기본 키와 외래 키가 대표적인 제약조건입니다. 

이메일, 휴대폰과 같이 중복되지 않는 열에는 고유 키를 지정할 수 있습니다. 회원의 평균 키는 당연히 200cm를 넘지 않겠죠? 이때 실수로 200을 입력하는 것을 방지하는 제약조건이 체크입니다. 회원 테이블에 국적을 입력한다면 99%는 대한민국일 것입니다. 매번 입력하기 귀찮다면 제약조건으로 기본값을 설정할 수 있습니다. 또한, 값을 꼭 입력해야 하는 NOT NULL 제약조건도 있습니다. 

 

 

-PRIMARY KEY  제약조건

-FOREIGN KEY 제약조건

-UNIQUE 제약조건

-CHECK 제약조건

-DEFAULT 정의

-NULL 값 허용

 

기본 키  제약조건

테이블에는 많은 행 데이터가 있습니다. 이 중에서 데이터를 구분할 수 있는 식별자를 기본 키primary Key라고 부릅니다. 예로 회원 테이블의 아이디, 학생 테이블의 학번, 직원 테이블의 사번 등이 이에 해당합니다. 

 

대부분의 테이블은 기본 키를 가져야 합니다. 물론, 기본 키가 없어도 테이블 구성이 가능하지만 실무에서 사용하는 테이블에는 기본 키를 설정해야 중복된 데이터가 입력되지 않습니다. 예를 들어 기본 키는 아이디가 동일한 회원이 입력되지 않도록 합니다. 기본 키로 생성한 것은 자동으로 클러스터형 인덱스가 생성됩니다. 

 

한 가지 더 기억할 것은 테이블은 기본 키를 1개만 가질 수 있습니다. 어떤 열에 설정해도 문법상 문제는 없으나 테이블의 특성을 가장 잘 반영하는 열을 선택하는 것이 좋습니다. 

 

CREATE TABLE에서 설정하는 기본 키 제약조건

USE naver_db;
DROP TABLE IF EXISTS buy, member;
CREATE TABLE member
( mem_id       CHAR(8) NOT NULL PRIMARY KEY,
  mem_name  VARCHAR(10) NOT NULL,
  height          TINYINT UNSIGNED NULL
);

ALTER TABLE에서 설정하는 기본 키 제약조건

외래 키 제약조건

두 테이블 사이의 관계를 연결해주고, 그 결과 데이터의 무결성을 보장해주는 역할을 합니다. 외래 키가 설정된 열은 꼭 다른 테이블의 기본키와 연결됩니다.

 

우리가 사용하는 회원 테이블과 구매 테이블이 바로 대표적인 기본 키-외래 키 관계입니다. 여기서 기본 키가 있는 회원 테이블을 기준 테이블이라고 부르며, 외래 키가 있는 구매 테이블을 참조 테이블이라고 부릅니다.

구매 테이블의 아이디(FK)는 반드시 회원 테이블의 아이디(PK)로 존재합니다.

기본 키-외래 키 관계를 맺으면 오류가 없는 데이터가 됩니다.

참조 테이블이 참조하는 기준 테이블의 열은 반드시 기본 키나, 고유 키로 설정되어 있어야 합니다. 

 

CREATE TABLE에서 설정하는 외래 키 제약조건

외래 키를 생성하는 방법은 CREATE TABLE 끝에 FOREIGN KEY 키워드를 설정하는 것입니다.

FOREIFN KEY( 열_이름) REFERENCES 기준_테이블(열_이름)

ALTER TABLE에서 설정하는 외래 키 제약조건

기준 테이블의 열이 변경될 경우

ON UPDATE CASCADE
ON DELETE CASCADE

기타 제약조건

 

고유 키 제약조건

'중복되지 않는 유일한 값'을 입력해야 하는 조건입니다. 이것은 기본 키 제약조건과 거의 비슷하지만, 차이점은 고유 키 제약조건은 NULL 값을 허용한다는 것입니다. NULL 값은 여러 개가 입력되어도 상관없습니다. 또 기본 키는 테이블에 1개만 설정해야 하지만, 고유 키는 여러 개를 설정해도 됩니다. 

 

체크 제약조건

입력되는 데이터를 점검하는 기능을 합니다.

 

기본값 정의

값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정해 놓는 방법입니다.

 

널 값 허용

'아무 것도 없다'라는 의미입니다. 공백(' ')이나 0과는 다르다는 점을 주의하세요.

NULL은 빈 값을 허용, NOT NULL은 빈 값을 허용하지 않는다는 의미입니다.