Pergunta

Eu tenho uma tabela no meu banco de dados com um campo declarado como

_id integer primary key

Não há AUTOINCREMENT.

Aqui eu tenho uma dúvida sobre como rowid será atualizado durante inserir depois de uma eliminação.o que eu observei é

  1. se a última linha id é x e ele é excluído, a próxima linha inserida receber o id x.

Mas se eu excluir algumas outras linhas com identificação de < x e, em seguida, inserir uma nova linha o rowid da linha recém-inserida é x+1 .

Por favor confirme que está a minha observação direito ( rowid reutilizado apenas se o último linhas são excluídas e não nas entre linhas.)

Eu vi a explicação para AUTOINCREMENT.Eu quero conhecer o comportamento quando não é definido AUTOINCREMENT

Foi útil?

Solução

O AUTOINCREMENT palavra-chave não é necessária para o SQLite tabelas para gerar valores de chave primária automaticamente..o que sempre você adicionar ao banco de dados será adicionado como a última linha...então, se vc apagar a última linha(x)..novo elemento será adicionado na posição x..se você eliminar do meio ou não..novo elemento na adição de ir para x+1 posição...

sobre a utilização de incremento automático..se você eliminar o último elemento na posição x ao lado de id x+1 será gerado pelo autoincrement algoritmo de..makin a próxima adição em x+1 posição..

Outras dicas

Sem um autoincrement conjunto, a linha seria um alias para o ROWID...

Isto é o que o FAQ diz:

Se não ROWID é especificado em inserir, ou, se especificado ROWID tem um valor NULO, em seguida, um adequado ROWID é criado automaticamente.O algoritmo usual é dar a recém-criada linha de um ROWID que é maior do que o maior ROWID na tabela antes da inserção.Se a tabela é inicialmente vazio, um ROWID de 1 é usado.Se o maior ROWID é igual ao maior inteiro (9223372036854775807), em seguida, o mecanismo de banco de dados começa a colheita positivo candidato ROWIDs aleatoriamente até encontrar um que não tenha sido previamente utilizado.Se não ROWID pode ser encontrado depois de um número razoável de tentativas, a operação de inserção falhará com um SQLITE_FULL erro.Se nenhum negativo ROWID valores são inseridos explicitamente, em seguida, gerado automaticamente valores ROWID vai ser sempre maior do que zero.

O normal ROWID algoritmo de seleção descrito acima irá gerar monotonicamente crescente única ROWIDs enquanto você não utilizar o máximo de ROWID valor e que você nunca apagar uma entrada na tabela com o maior ROWID.Se você nunca excluir linhas ou se você nunca criará uma linha com o máximo possível de ROWID, em seguida, ROWIDs anteriormente excluídos linhas pode ser reutilizado quando a criação de novas linhas e a recém-criada ROWIDs pode não ser estritamente em ordem crescente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top