
안녕하세요 오늘은 SQL의 Unique에 대해 알아볼게요.
MySQL의 제약조건 Unique에 설명
Unique는 특정 열의 값이 테이블 내에 중복되지 않도록 보장시킴으로
두 행이 같은 값을 가질 수 없어요.
단 Null은 예외적으로 허용 가능해요.
Unique 사용 예시
1. 열 수준 (Column - level)
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(100) UNIQUE, -- UNIQUE 열 제약
email VARCHAR(255)
);
위 예제로 username열이 Unique 설정으로 동일한 username을 가질 수 없고
email은 아무 제약이 없다는 걸 확인할 수 있어요.
2. 테이블 수준 (Table - level)
CREATE TABLE employees (
id INT PRIMARY KEY,
first_name VARCHAR(100),
last_name VARCHAR(100),
UNIQUE (first_name, last_name) -- 복합 UNIQUE 제약
);
칼럼은 아무런 제약이 없지만
name 두 칼럼들의 Unique 설정으로 조합의 유일함을 설정했어요.
3. CONSTRAINT 이름 붙임
CREATE TABLE customers (
id INT PRIMARY KEY,
email VARCHAR(255),
CONSTRAINT unique_email UNIQUE (email)
);
Unique 제약에 이름을 붙임으로 에러 메시지나 관리에 도움 줄 수 있어요.
4. CREATE UNIQUE INDEX 문법
CREATE UNIQUE INDEX idx_username_email
ON users (username, email);
username과 email 조합이 유일하고, 복합 인덱스와 중복이 불가능해요.
그 외 여러 가지 Unique 예시들은 간단하게 표로 정리해 봤어요.
| 열 수준 | username VARCHAR(100) UNIQUE | 단일 열 중복 방지 |
| 테이블 수준 | UNIQUE (col1, col2) | 복합 열 중복 방지 |
| 제약 이름 지정 | CONSTRAINT u_email UNIQUE(email) | 제약 조건 이름 부여 |
| 인덱스 | CREATE UNIQUE INDEX idx ON tbl(col) | 유니크 인덱스 생성 |
| 인덱스 옵션 | USING BTREE, VISIBLE, COMMENT 등 | 인덱스 세부 제어 |
| ALTER 추가 | ALTER TABLE ... ADD UNIQUE ... | 기존 테이블에 제약 추가 |

여기까지 SQL의 Unique에 대해 알아봤는데요.
Unique를 포스팅한 이유 중 하나는 SQLD 시험에 Unique 관련 문제가 많이 보여서 에요.
혹시나 SQL과 SQLD 시험공부 중 Unique의 궁금증이 조금이라도 풀렸으면 좋겠어요.
'Backend > MySQL' 카테고리의 다른 글
| SQL - 구성 요소 (3) | 2025.08.24 |
|---|---|
| SQL - Subquery (5) | 2025.08.10 |
| SQL - Select (6) | 2025.08.09 |
| SQL 제약조건 (8) | 2025.08.07 |
| SQL의 무결성 (4) | 2025.08.05 |