[sql] SQLite 재설정 기본 키 필드

SQLite에 테이블이 몇 개 있고 자동 증가 데이터베이스 필드를 재설정하는 방법을 알아 내려고합니다.

나는 DELETE FROM tablename모든 것을 삭제하고 자동 증가 필드를 다시으로 재설정해야한다고 읽었 0지만 이렇게하면 데이터가 삭제됩니다. 새 레코드가 삽입되면 자동 증가는 삭제 전에 중단 된 위치를 선택합니다.

ident필드 속성은 다음과 같습니다.

  • 필드 유형 :integer
  • 필드 플래그 : PRIMARY KEY, AUTOINCREMENT,UNIQUE

SQLite Maestro에서 테이블을 DELETE작성하고 SQLite Maestro에서도 명령문을 실행하는 것이 중요합니까 ?

어떤 도움이라도 좋을 것입니다.



답변

이 시도:

delete from your_table;
delete from sqlite_sequence where name='your_table';

SQLite 자동 증가

SQLite는 특수 SQLITE_SEQUENCE테이블을 사용하여 테이블이 보유한 가장 큰 ROWID를 추적 합니다 .
SQLITE_SEQUENCE테이블 생성 및 자동 증가 열을 포함하는 통상의 테이블이 생성 될 때마다 자동으로 초기화된다. SQLITE_SEQUENCE 테이블의 내용은 일반 UPDATE, INSERT 및 DELETE 문을 사용하여 수정할 수 있습니다. 그러나이 테이블을 수정하면 AUTOINCREMENT 키 생성 알고리즘이 교란 될 수 있습니다. 그러한 변경을 수행하기 전에 무엇을하고 있는지 확인하십시오.


답변

테이블에서 행을 삭제 한 후 업데이트 순서로 재설정 할 수 있습니다.

UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name';


답변

대체 옵션으로 Sqlite 데이터베이스 브라우저가 있고 GUI 솔루션에 더 관심이있는 경우 필드 이름이 테이블 이름 인 sqlite_sequence 테이블을 편집 할 수 있습니다. 필드 seq의 셀을 두 번 클릭하고 팝업되는 대화 상자에서 값을 0으로 변경합니다.


답변

콘텐츠 공급자를 통해 모든 RowId를 재설정하려면 다음을 시도하십시오.

rowCounter=1;
do {
            rowId = cursor.getInt(0);
            ContentValues values;
            values = new ContentValues();
            values.put(Table_Health.COLUMN_ID,
                       rowCounter);
            updateData2DB(context, values, rowId);
            rowCounter++;

        while (cursor.moveToNext());

public static void updateData2DB(Context context, ContentValues values, int rowId) {
    Uri uri;
    uri = Uri.parseContentProvider.CONTENT_URI_HEALTH + "/" + rowId);
    context.getContentResolver().update(uri, values, null, null);
}


답변