Italian SQL Lite e suoi limiti

Oldmanenzo

Member
Licensed User
Longtime User
Salve a tutti
giocherellando un po con sql lite mi rendo conto di un limite direi abbastanza importante, almeno credo che sia cosi, visto che il db ed alcune tabelle le creo con visual studio.
Ho notato che la chiave principale di un campo (di solito ID) non ha possibilità di autoincrement. Puo essere sicuramente univoco. Come e quale metodo utilizzate per incrementare il vostro ID o se utilizzate altri metodi. Io di solito carico un cursor con il solo campo id e lo metto in ordine ascendente. A questo punto posiziono il cursore sull'ultimo record, leggo il contenuto ed incremento di 1. So che non è un buon metodo, ma sinceramente non ne trovo altri.
Voi di solito come fate??
Grazie a tutti.
 

cimperia

Active Member
Licensed User
Longtime User
Auto-incremento è possibile (AUTOINCREMENT), ma questo non è necessario con sqlite. È addirittura dannoso.

In SQLite, a column with type INTEGER PRIMARY KEY is an alias for the ROWID

https://www.sqlite.org/autoinc.html
 

Oldmanenzo

Member
Licensed User
Longtime User
Stavo leggendo un po ed in effetti è possibile dichiarare autoincrement ma se dannoso allora non conviene
il problema e faccio un piccolo esempio utilizzando il db access e dichiaro la chiave primaria con autoincrement
quando scrivo un nuovo record non ho la necessità di scrivere anche il valore dell'indice perche viene incrementato automaticamente
di uno. Mi sembra che questo non sia possibile in sql lite.
comunque l'istruzione dettata da AlpVir è sicuramente piu comoda e veloce.
 

cimperia

Active Member
Licensed User
Longtime User
Ma sì, SQLite funziona esattamente così: quando si inserisce un nuovo record non si specifica l'ID e sarà incrementato di 1. Vedrete che una tabella viene creata (sqlite_sequence) se non esiste già, e conterrà un record per la tabella e l'ultimo numero di sequenza.

Dannoso significa rallenta (un po '), l'inserto.

B4X:
drop table IF EXISTS test;

create table test
(id integer primary key  autoincrement
,name varchar2
);

insert into test (name) values ("john");
insert into test (name) values ("carlos");

select * from test;

id    name
1    john
2    carlos

select * from sqlite_sequence;

name   seq
test     2
 
Last edited:
Cookies are required to use this site. You must accept them to continue using the site. Learn more…