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_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);
}