Domanda

Ho un tavolo nel mio database con un campo dichiarato come

_id integer primary key
.

Non ci sono autoincrementi.

Qui ho dubbi sul modo in cui RowID verrà aggiornato durante l'inserto dopo una cancellazione.Quello che ho osservato è

    .
  1. Se l'ultimo ID riga è x ed è eliminato, la riga successiva inserita viene inserita x.

    Ma se elimino alcune altre righe con ID

    Confermare è il mio diritto di osservazione (Rowid riutilizzato solo se le ultime file vengono cancellate e non tra le righe.)

    Ho visto la spiegazione per l'autoincrement.Voglio conoscere il comportamento quando nessun autoincrement è impostato

È stato utile?

Soluzione

La parola chiave automatica non è richiesta per le tabelle SQLite per generare valori chiave primari automaticamente. Ciò che mai si aggiunge al database verrà aggiunto come ultima riga ... quindi se elimini l'ultima riga (x) .. Nuovo elemento verrà aggiunto a X position .. Se si elimina il mezzo o meno.L'aggiunta andrà a x + 1 posizione ...

On utilizzando l'incremento automatico .. Se si elimina l'ultimo elemento a X posizione il prossimo ID X + 1 verrà generato da algoritmo di autoincremento .. Makin la successiva aggiunta in posizione X + 1.

Altri suggerimenti

Senza un set di autoincrementi, la riga sarebbe un alias per la rowid ...

Questo è ciò che dice le FAQ:

Se nessuna rowid è specificata sull'inserto, o se la rowid specificata ha un valore di NULL, è possibile creare automaticamente una rowid appropriata. Il solito algoritmo è quello di fornire la riga appena creata a Rowid che è una più grande del più grande rowid nella tabella prima dell'inserto. Se la tabella è inizialmente vuota, viene utilizzata una rowid di 1. Se il più grande rowid è uguale al più grande numero intero possibile (9223372036854775807), il motore del database inizia a raccogliere rowids candidati positivi a caso finché non trova uno che non viene precedentemente utilizzato. Se nessuna rowid non utilizzata può essere trovata dopo un numero ragionevole di tentativi, l'operazione Insert non riesce con un errore SQLite_Full. Se non vengono inseriti valori a rowid negativi esplicitamente, quindi i valori di rowid generati automaticamente saranno sempre maggiori di zero.

Il normale algoritmo di selezione della rowid è descritto sopra genererà monotonicamente aumentando i rowids unici purché non si utilizza mai il valore massimo di rowid e non si elimina mai la voce nella tabella con la rowid più grande. Se si elimina mai le righe o se si creava mai una riga con la massima rowid possibile, le rowids da righe eliminate in precedenza potrebbero essere riutilizzate quando si creano nuove righe e reawids appena create potrebbero non essere in ordine rigendamente ascendente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top