본문 바로가기
Knowledge/IT, 인터넷

SQLite에서 PRIMARY KEY 제거하는 방법 완전 정리 (+실습 예제)

by MoSeoPAPA 2025. 5. 22.
반응형

 

SQLite에서 PRIMARY KEY 제거하는 방법 완전 정리

1. PRIMARY KEY란 무엇인가요?

PRIMARY KEY는 데이터베이스에서 한 행(row)을 고유하게 식별하는 데 사용하는 컬럼입니다. 보통 회원 정보 테이블에서는 user_id 같은 값이 사용되죠. PRIMARY KEY는 다음과 같은 특징이 있습니다:

  • 중복을 허용하지 않습니다
  • NULL 값을 허용하지 않습니다
  • 자동으로 인덱스가 생성됩니다

하지만 시스템 변경이나 구조 재정비를 하다 보면 PRIMARY KEY를 제거해야 할 때가 있습니다.

2. SQLite에서는 왜 PRIMARY KEY를 직접 제거할 수 없나요?

SQLite는 다른 RDBMS(MySQL, PostgreSQL 등)와 달리 ALTER TABLE 문법의 제약이 큽니다.
예를 들어 아래와 같은 명령은 SQLite에서 지원되지 않습니다.

ALTER TABLE users DROP CONSTRAINT PRIMARY KEY;

그래서 구조를 바꾸려면 테이블을 새로 만들고 데이터를 옮기는 방식을 사용해야 합니다.

3. 단계별 실습: PRIMARY KEY 제거하기

🔧 가정

다음과 같은 테이블이 있다고 가정합니다:

CREATE TABLE users (
    user_id TEXT PRIMARY KEY,
    username TEXT,
    email TEXT,
    signup_date TEXT
);

🧱 제거 절차

  1. 새 테이블 생성 (PRIMARY KEY 제거)
  2. 기존 데이터 복사
  3. 기존 테이블 삭제
  4. 새 테이블 이름 변경
-- 1. 새로운 테이블 생성 (user_id에 PRIMARY KEY 제거)
CREATE TABLE users_new (
    user_id TEXT,
    username TEXT,
    email TEXT,
    signup_date TEXT
);

-- 2. 기존 데이터 복사
INSERT INTO users_new
SELECT * FROM users;

-- 3. 기존 테이블 삭제
DROP TABLE users;

-- 4. 새 테이블 이름 변경
ALTER TABLE users_new RENAME TO users;

4. 작업 시 주의사항

  • 백업 먼저! DROP TABLE은 되돌릴 수 없습니다.
  • 데이터 손실 방지를 위해 SELECT COUNT(*) 등으로 데이터 수를 비교하세요.
  • 외래키(FK) 제약 조건이 있다면 새로 연결해줘야 합니다.

5. 자주 묻는 질문 (FAQ)

Q. 꼭 DROP TABLE을 해야 하나요?

A. 네. SQLite는 PRIMARY KEY를 직접 제거하는 명령이 없기 때문에, 테이블을 재구성해야 합니다.

Q. AUTOINCREMENT도 같이 사라지나요?

A. 네. AUTOINCREMENT는 PRIMARY KEY가 있어야 작동하므로, 제거 시 기능이 사라집니다.

Q. 외래 키(FK)를 사용하는 테이블이 있으면요?

A. 먼저 해당 FK 제약 조건을 끊고 다시 연결해야 합니다. PRAGMA foreign_keys = OFF;로 임시 비활성화 후 작업하세요.

6. 마무리

SQLite에서 PRIMARY KEY를 제거하는 과정은 생각보다 번거롭지만, 위의 절차대로 한다면 안전하게 처리할 수 있습니다.
이 글이 테이블 구조를 수정하는 데 도움이 되었기를 바랍니다. 😄


반응형

댓글