Campo de chave primária de redefinição de SQLite
Tenho algumas tabelas no SQLite e estou tentando descobrir como redefinir o campo de banco de dados incrementado automaticamente.
Eu li que DELETE FROM tablenamedeve excluir tudo e redefinir o campo de incremento automático de volta para 0, mas quando faço isso, ele apenas exclui os dados. Quando um novo registro é inserido, o incremento automático continua de onde parou antes da exclusão.
Minhas identpropriedades de campo são as seguintes:
Tipo de campo :integer
Campo Flags : PRIMARY KEY, AUTOINCREMENT,UNIQUE
Faz diferença se eu construí a tabela no SQLite Maestro e estou executando a DELETEinstrução no SQLite Maestro também?
SQLite mantém registro do maior ROWID que uma tabela já manteve usando a SQLITE_SEQUENCEtabela especial . A SQLITE_SEQUENCEtabela é criada e inicializada automaticamente sempre que uma tabela normal que contém uma coluna AUTOINCREMENT é criada. O conteúdo da tabela SQLITE_SEQUENCE pode ser modificado usando instruções UPDATE, INSERT e DELETE comuns. Mas fazer modificações nesta tabela provavelmente perturbará o algoritmo de geração de chave AUTOINCREMENT. Certifique-se de saber o que está fazendo antes de realizar tais mudanças.
Apenas uma pequena observação lateral: nome da tabela em que a cláusula
— where diferencia
outra maneira é atualizar a tabela sqlite_sequence. update sqlite_sequence set seq = 0 where name = '<tablename>' Isso não irá redefinir o rowid da tabela sqlite_sequence.
— binário
@binary, obrigado por mencionar uma forma alternativa :) Gostaria de observar que o SQLite reutiliza o espaço "excluído", então não faz muita diferença qual solução escolheremos.
Observe que o SQLite só cria a tabela sqlite_sequence quando você define uma coluna de incremento automático. Não existe antes disso.
@ZacharyYates, sim, mas já está mencionado no texto citado.
Você pode redefinir por sequência de atualização após linhas excluídas em sua tabela
você pode me dizer como fazer isso para o quarto?
o que você quer dizer com @Psycho? Eu não consigo entender :)
— Huỳnh Ngọc Bang,
na verdade, eu estava perguntando como fazer isso no Room Database ... bem, o problema está resolvido por enquanto
@Psycho, você pode me dizer como usou isso usando o banco de dados do Room?
— prakashpun
Como opção alternativa, se você tiver o navegador de banco de dados Sqlite e estiver mais inclinado a uma solução GUI, poderá editar a tabela sqlite_sequence em que nome do campo é o nome da sua tabela. Clique duas vezes na célula do campo seq e altere o valor para 0 na caixa de diálogo que aparece.