반응형
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
);
🧱 제거 절차
- 새 테이블 생성 (PRIMARY KEY 제거)
- 기존 데이터 복사
- 기존 테이블 삭제
- 새 테이블 이름 변경
-- 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를 제거하는 과정은 생각보다 번거롭지만, 위의 절차대로 한다면 안전하게 처리할 수 있습니다.
이 글이 테이블 구조를 수정하는 데 도움이 되었기를 바랍니다. 😄
반응형
'Knowledge > IT, 인터넷' 카테고리의 다른 글
Docker에서 시간대(TZ)를 Asia/Seoul로 변경하는 방 (1) | 2025.05.22 |
---|---|
Docker 컨테이너 재부팅 후 Flask 접속 불가? 원인과 해결 방법 총정리 (0) | 2025.05.22 |
SIM 스와핑이란? 당신의 번호를 노리는 해커의 기술 (4) | 2025.05.10 |
HSS (Home Subscriber Server)란 무엇일까? (1) | 2025.05.10 |
MCP 서버란? AI의 미래를 여는 모델 컨텍스트 프로토콜 완전 정복 (2) | 2025.04.01 |
댓글