제약조건이란?
테이블에 저장되는 데이터의 정확성과 일관성을 보장하기 위해 사용된다.
즉, 잘못된 값이 입력되지 않도록 하는 일종의 규칙이다.
제약 조건의 종류 및 설명
제약조건 | 설명 | 특징 | 자주 사용되는 상황 |
NOT NULL | 해당 컬럼에는 반드시 값을 가지고 있어야 함 | 기본적으로 NULL 허용 | 필수 입력값일 경우 |
UNIQUE | 중복되지 않는 값을 요구함 | 하나 이상의 컬럼에 지정 가능 | 이메일, 전화번호 등 중복 허용되지 않는 데이터 |
PRIMARY KEY | 각 행을 고유하게 식별하는 컬럼 | NOT NULL + UNIQUE의 의미를 가지고 있음. 테이블당 하나만 지정할 수 있음 |
중복 값이 없는 유일한 값으로 행을 식별 시 ( ex. 주민등록번호, 이메일 등 ) |
FOREIGN KEY | 다른 테이블의 값과 연결 | 참조 무결성 유지, 삭제/수정 시 제약 가능 | 주문 테이블에서 사용자 테이블의 ID를 참조할 때 |
DEFAULT | 값이 입력되지 않을 경우 기본값 설정 | 자동 입력 | 상태(status) 기본값을 설정 |
CHECK | 특정 조건을 만족하는 값만 허용 | 비교 연산 가능, 단 복잡한 로직은 DB 종류에 따라 제한 | 필수 |
INDEX란?
책의 목차처럼, 데이터베이스(DB)에서 빠르게 원하는 데이터를 찾을 수 있게 도와주는 검색 도구
인덱스는 특정 컬럼의 값을 기준으로 데이터를 빠르게 조회할 수 있게 해주는 보조 구조입니다.
단, 인덱스의 단점도 있다.
1. 쓰기 기능 저하 - INSERT, UPDATE, DELETE 시 인덱스도 같이 갱신되기 때문에 해당 명령어를 사용할 경우 느려진다.
2. 저장공간 사용 증가 - 인덱스 구조도 따로 저장됨
INDEX의 종류
인덱스 종류 | 설명 | 사용 예 |
기본 인덱스 (B-Tree) | 가장 일반적으로 사용되는 인덱스 | 숫자, 날짜, 문자열 검색 |
유니크 인덱스 | 중복 불가 (UNIQUE 제약조건용) | 이메일, 주민등록번호 등 |
복합 인덱스 | 두개 이상 컬러 결합 | WHERE a = ? AND b = ? |
FOREIGN KEY를 지정할 시, INDEX 자동 생성 여부
우선, FOREIGN KEY를 지정하면 DBMS가 자동으로 INDEX를 생성하는지는 DB 종류에 따라 다르다.
DBMS | FOREIGN KEY 지정 시 INDEX 자동 생성 여부 | etc. |
MySQL | ✅ | 단, 외래 키 컬럼에 인덱스가 없는 경우에만 생성 |
PostgresSQL | ❌ | 직접 CREATE INDEX해야 성능 보장됨 |
Oracle | ❌ | 명시적으로 인덱스 추가 필요함 |
SQL Server | ❌ | 성능 최적화를 위해 수동 인덱스를 권장함 |
🔗 Reference
- [오라클/SQL] 제약조건의 종류와 특성 요약 정리: PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY, CHECK