문제

하나의 필드가 로 선언 된 필드가있는 테이블이 있습니다.

_id integer primary key
.

자동 이삭은 없습니다.

여기에서는 삭제 후 삽입 중 RoenID가 업데이트되는 방법에 대해 의심의 여지가 있습니다.내가 관찰 한 것은 입니다

  1. 마지막 행 ID가 x이고 삭제되면 다음 행이 삽입 된 ID x를 가져옵니다.

    그러나 ID

    내 관찰 권리가 확인 (마지막 행이 삭제되고 행 사이에만 삭제되지 않은 경우에만 ROWID 재사용)

    나는 autoincrement에 대한 설명을 보았습니다.Autoincrement가 설정되지 않은 경우의 동작을 알고 싶습니다

도움이 되었습니까?

해결책

SQLite 테이블에는 자동 설정 키워드가 필요하지 않습니다. 데이터베이스에 추가하는 것은 마지막 행으로 추가됩니다 ... 그래서 마지막 행 (x)을 삭제하면 x 위치에 새 요소가 추가됩니다 .. 중간에서 삭제하는 경우 .. 새 요소추가로 x + 1 위치로 이동합니다 ...

자동 증가를 사용합니다. X 위치에서 마지막 요소를 삭제하면 다음 ID x + 1은 자동 increment 알고리즘으로 생성됩니다. x + 1 위치에서 다음 추가를 첨가합니다 ..

다른 팁

자동 삭제가 없으면 행은 ROWID의 별칭이 될 것입니다 ...

FAQ가 말하는 것입니다.

삽입물에 ROWID가 지정되지 않거나 지정된 ROWID가 NULL 값이있는 경우 적절한 ROWID가 자동으로 생성됩니다. 일반적인 알고리즘은 새로 생성 된 행에 삽입 전에 테이블에서 가장 큰 RowID보다 큰 RowID를 제공하는 것입니다. 테이블이 초기에 비어 있으면 rowid 1이 사용됩니다. 가장 큰 RowID가 가장 큰 정수 (9223372036854775807)와 같으면 데이터베이스 엔진은 이전에 사용되지 않은 것을 찾을 때까지 무작위로 긍정적 인 후보 RowID를 선택합니다. 합리적인 수의 시도가 끝나면 사용되지 않은 ROWID를 찾을 수 없으면 SQLIte_Full 오류가 실패합니다. 음의 rowid 값이 명시 적으로 삽입되지 않으면 자동으로 생성 된 RowID 값은 항상 0보다 크게됩니다.

위에서 설명한 정상적인 RowID 선택 알고리즘은 최대 RowID 값을 사용하지 않는 한 단조롭게 증가하는 고유 한 RowID를 생성하고 가장 큰 RowID로 테이블의 항목을 삭제하지 않습니다. 행을 삭제하거나 가능한 최대 rowid가있는 행을 만들면 이전에 삭제 된 행의 rowids가 새 행을 만들 때 재사용 할 수 있고 새로 생성 된 RowID가 엄격하게 오름차순으로 오름차순이 아닐 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top