Ho una tabella SQLite, con poche colonne, inclusa una colonna "ID" che è INTEGER PRIMARY KEY.
Quando inserisco, questo valore aumenta come previsto.
Tuttavia, quando elimino tutte le righe, il valore di questa colonna torna a 1 nell'inserzione successiva.
C'è un modo per avere il valore della colonna continuare ad aumentare dal valore più alto prima della cancellazione?
Per esempio:
- (tabella vuota)
- inserire
- inserire
(Il valore ID della seconda riga è 2, l'inserimento successivo sarà 3)
- cancella tutte le righe
- inserire
(Il valore ID per questa ultima riga è 1, ma voglio che sia 3)
risposte:
2 per risposta № 1Se la parola chiave AUTOINCREMENT viene visualizzata dopoINTEGER PRIMARY KEY, che modifica l'algoritmo di assegnazione ROWID automatico per impedire il riutilizzo dei ROWID per tutta la durata del database. In altre parole, lo scopo di AUTOINCREMENT è impedire il riutilizzo dei ROWID dalle righe cancellate in precedenza.
https://www.sqlite.org/autoinc.html
0 per risposta № 2
Quale versione di SQLite stai usando? sto usando SQLite version 3.8.11.1
. I valori delle chiavi primarie non si ripristinano.
Crea una tabella e inserisci alcuni dati
sqlite> create table test (id integer primary key autoincrement, name varchar(20));
sqlite> select * from test;
sqlite> insert into test (name) values ("hello1");
sqlite> insert into test (name) values ("hello2");
sqlite> select * from test;
id name
---------- ----------
1 hello1
2 hello2
sqlite> select * from sqlite_sequence;
name seq
---------- ----------
test 2
In un autoincrement
colonna, sqlite mantiene le informazioni della sequenza in sqlite_sequence
tabella interna che puoi anche richiedere.
Elimina dati. Si noti che la sequenza rimane così com'è.
sqlite> delete from test;
sqlite> select * from sqlite_sequence;
name seq
---------- ----------
test 2
sqlite> select * from test;
sqlite> insert into test (name) values ("world1");
sqlite> insert into test (name) values ("world2");
sqlite> select * from test;
id name
---------- ----------
3 world1
4 world2
sqlite> select * from sqlite_sequence;
name seq
---------- ----------
test 4
In base a ciò, sembra che i numeri di sequenza rimangano così come sono dopo la cancellazione. Sto usando il autoincrement
parola chiave.