DB

[SQLite]테이블 컬럼 자동증가값(autoincrement) 초기화 방법

테이블을 생성할 때 칼럼의 옵션으로 autoincrement를 설정했을 때 해당 값을 초기화 하는 방법 있는지 알아보았다. 기본키(Primary key)로 사용하고 있다면 더더욱 초기화가 필요하다.

    public static void createTableMyNumber(SQLiteDatabase database){
        try {
            if(database != null){
                database.execSQL("CREATE TABLE if not exists TB_TEMP_JS ("
                        +"event_id integer PRIMARY KEY autoincrement"
                        +",_seqNum varchar(7)"
                        +",_trade VARCHAR(50)"
                        +",_char_column_1 VARCHAR(1)"
                        +",_char_column_2 VARCHAR(1)"
                        +",_char_column_3 VARCHAR(1)"
                        +",_char_column_4 VARCHAR(1)"
                        +",_char_column_5 VARCHAR(1)"
                        +",_char_column_6 VARCHAR(20)"
                        +",_char_column_7 VARCHAR(20)"
                        +",_char_column_8 VARCHAR(10)"
                        +");");
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

다른 데이터베이스와 달리 TRUNCATE문을 지원하지 않기 때문에 보통 DELETE문을 사용하여 데이터만 모두 삭제 후 사용하게된다.

database.execSQL("DELETE FROM TB_TEMP_JS ");

그러나 해당 칼럼(event_id)을 조인하여 데이터를 가져오는 다른 테이블의 조회문이 있을 경우 문제가 발생한다.  해당 컬럼값을 다른 테이블에서 저장하여 사용하고 있는 경우가 그렇다.

 

그럼으로 자동증가값를 초기화해 주는 작업이 필요하다.

아래 update문의 경우 제대로 동작하지 않았다.

database.execSQL("UPDATE SQLITE_SEQUENCE SET event_id = 1 WHERE NAME = 'TB_TEMP_JS'");

그러나 아래 DELETE문으로 실행해보니 정상적으로 처리가 되었다.

//자동증가 PK값 초기화
database.execSQL("DELETE FROM sqlite_sequence WHERE NAME = 'TB_TEMP_JS'");

만약 위 방법이 제대로 되지 않는 경우 해당 테이블을 삭제 후 다시 생성하고 데이터를 insert를 해도 무방하다.

 

 

[reference]

 

 

 

 

Leave a Reply

error: Content is protected !!