SQLite 에서 AUTOINCREMENT 컬럼 초기화하는 방법
Intro
SQLite 에서는 AUTOINCREMENT 설정 시 새로운 테이블(sqlite_sequence
)이 생성되는데, 이 테이블에서 AUTOINCREMENT가 설정된 정보가 담긴 row를 찾아 제거해야 자동으로 증가하여 저장되는 숫자를 초기화할 수 있습니다.
Summary
1
DELETE FROM sqlite_sequence WHERE name='테이블이름';
확인해보기
CREATE
아래와 같이 id에 AUTOINCREMENT가 설정된 테이블을 생성합니다.
1
2
3
4
5
6
CREATE TABLE "flashcards" (
"id" INTEGER NOT NULL,
"front" TEXT NOT NULL,
"back" TEXT,
PRIMARY KEY("id" AUTOINCREMENT)
)
DB browser 를 통해 확인해보면, 아래와 같이 자동으로 sqlite_sequence 테이블이 생성된 것을 확인할 수 있습니다.
INSERT
테스트용 데이터를 아래와 같이 삽입합니다.
1
INSERT INTO flashcards(front, back) VALUES("front", "back");
SELECT
그리고 확인해보면, id가 1로 자동으로 저장되어 있습니다.
1
SELECT * FROM flashcards;
sqlite_sequence 테이블도 확인해보면, name 컬럼에는 AUTOINCREMENT를 설정한 테이블 이름인 flashcards 가 있고, 1개를 삽입했기 때문에 seq 컬럼에는 1이 저장되어 있습니다.
1
SELECT * FROM sqlite_sequence;
DELETE
아래와 같이 flashcards 에 있는 데이터를 전부 DELETE 구문을 이용하여 삭제를 해봅니다.
1
DELETE FROM flashcards;
하지만 다시 INSERT를 하면, id는 2부터 삽입이 되는 것을 확인할 수 있습니다.
이는 sqlite_sequence 테이블에 flashcards 테이블의 sequence 번호가 남아있기 때문입니다.
그래서 id를 다시 1부터 삽입하려면 아래와 같이 sqlite_sequence 테이블에서 flashcards 테이블의 sequence 번호를 삭제해 주어야 합니다.
1
DELETE FROM sqlite_sequence WHERE name="flashcards";
그러면 다시 1부터 증가시키면서 저장이 되는 것을 확인할 수 있습니다.
UPDATE
원한다면, seq 값을 바꿔서 다음에 저장될 sequence 번호를 변경할 수도 있습니다.
1
UPDATE sqlite_sequence SET seq = 100 WHERE name = "flashcards";
Outro
데이터베이스 테스트 코드를 작성하면서 저번에 sqlite를 사용할 때는 AUTOINCREMENT를 사용하지 않았었다는걸 발견해서 정리할 겸 작성해 봤습니다.