본문 바로가기
컴퓨터

👨‍💻 [SQLite] SQLite3 의 인덱스 필드에 NULL 을 허용하려면 어떻게 해야 하나요?

by 밝음의기둥 2025. 3. 10.
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

SQLite3 의 인덱스 필드에 NULL 을 허용하려면 어떻게 해야 하는지 간략히 알아보았습니다.


질문 >

SQLite3 의 인덱스 필드에 NULL 을 허용하려면 어떻게 해야 하나요?

답변 >

SQLite에서 INDEX 필드(즉, 인덱스를 적용할 열)에 NULL 값을 허용하려면 별도의 설정 없이 기본적으로 허용됩니다. SQLite의 B-Tree 인덱스는 NULL 값을 저장할 수 있습니다.

다만, 아래와 같은 경우 NULL 값이 제한될 수 있습니다.

1. UNIQUE INDEX와 NULL 값

  • SQLite에서는 UNIQUE INDEX가 적용된 필드에 NULL 값을 여러 개 저장할 수 있습니다.
  • 이는 NULL이 "동일하지 않음"으로 간주되기 때문입니다.
CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    email TEXT UNIQUE  -- UNIQUE INDEX 적용
);

INSERT INTO users (email) VALUES (NULL);  -- 허용됨
INSERT INTO users (email) VALUES (NULL);  -- 허용됨 (다른 NULL로 취급)

2. PRIMARY KEY 인덱스와 NULL 값

  • INTEGER PRIMARY KEY는 NULL을 허용하지 않습니다.
  • 하지만 일반 PRIMARY KEY에 대해서는 NULL을 허용합니다.
CREATE TABLE test1 (
    id INTEGER PRIMARY KEY,  -- NULL 허용 안됨
    name TEXT
);

INSERT INTO test1 (id, name) VALUES (NULL, 'Alice');  -- 오류 발생!

CREATE TABLE test2 (
    id INTEGER,
    name TEXT,
    PRIMARY KEY (id)  -- NULL 허용
);

INSERT INTO test2 (id, name) VALUES (NULL, 'Bob');  -- 정상 동작

3. INDEX 생성 시 NULL 값 허용

별도의 설정 없이 CREATE INDEX를 사용하면 NULL 값도 인덱싱됩니다.

CREATE TABLE products (
    id INTEGER PRIMARY KEY,
    category TEXT
);

CREATE INDEX idx_category ON products (category);

INSERT INTO products (category) VALUES (NULL), ('Electronics'), (NULL), ('Books');

  • 위 테이블에서 category 필드는 NULL을 포함할 수 있으며, 인덱스 idx_category에도 NULL 값이 저장됩니다.
  • SELECT * FROM products WHERE category IS NULL; 쿼리도 인덱스를 사용할 수 있습니다.

4. NULL을 제외한 인덱스 만들기

만약 NULL 값을 인덱스에서 제외하려면 파셜 인덱스(Partial Index) 를 사용할 수 있습니다.

CREATE INDEX idx_category_not_null ON products (category) WHERE category IS NOT NULL;

  • 이렇게 하면 category 값이 NULL이 아닌 행만 인덱스에 포함됩니다.

결론

✅ SQLite의 일반 INDEX는 NULL 값을 허용합니다.

✅ UNIQUE INDEX는 NULL 값을 중복 저장할 수 있습니다.

✅ INTEGER PRIMARY KEY는 NULL을 허용하지 않습니다.

✅ NULL 값을 제외한 인덱스를 만들려면 WHERE column IS NOT NULL 조건을 사용하면 됩니다.



🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형