
문제
복합 컬럼 col1, col2를 대상으로 유니크 인덱스 조건이 걸린 test_table이 있다.
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
col1 VARCHAR(50),
col2 VARCHAR(50),
UNIQUE KEY uniq_col1_col2 (col1, col2)
);
다음 쿼리를 실행할 때 예상되는 결과를 고르시오
INSERT INTO test_table (col1, col2) VALUES ('A', NULL);
INSERT INTO test_table (col1, col2) VALUES ('A', NULL);
선지
A) 두 삽입 쿼리 모두 성공한다
B) 첫번째 삽입 쿼리는 성공하고 두번째 삽입 쿼리는 실패한다
C) 두 삽입 쿼리 모두 실패한다
정답
더보기
A) 두 삽입 쿼리 모두 성공한다
B) 첫번째 삽입 쿼리는 성공하고 두번째 삽입 쿼리는 실패한다
C) 두 삽입 쿼리 모두 실패한다
핵심 해설
유니크 인덱스는 NULL 중복을 허용합니다. 실제로 MySQL 공식문서의 Unique Index에 대한 서술을 보면 Unique Index 의 Null 중복을 허용하고 있음을 명시하고 있습니다.

특히 복합 인덱스의 동일성 판단에 있어 NULL이 포함되면 ('A', NULL) = ('A', NULL)의 결과는 곧 NULL이므로 유니크 제약조건에 위반도지 않는 결과가 나옵니다.
상세 해설
실습으로 확인해보기
문제와 같이 예시 테이블을 세팅하고 쿼리를 실행해보겠습니다.

두개의 삽입 쿼리 모두 실행이 잘 되는 것을 볼 수 있으며, 테이블을 조회해보아도 Unique 제약조건에 위배되지 않고 NULL 중복을 허용한 상태로 행이 삽입되어 있는 모습을 볼 수 있습니다.
Reference)
'인덱스 퀴즈 해설' 카테고리의 다른 글
| [42번] 인덱스 스킵 스캔(2) (0) | 2025.12.05 |
|---|---|
| [41번] 인덱스 스킵 스캔(1) (0) | 2025.12.05 |
| [39번] count(*) 풀 인덱스 스캔 (0) | 2025.12.05 |
| [38번] 커버링 인덱스 (3) (0) | 2025.12.05 |
| [37번] 커버링 인덱스 (2) (0) | 2025.12.05 |