Ho una tabella sqlite (sqlite versione 3.7.3) dove nulli inseriti nella colonna chiave primaria stanno essendo indesiderabilmente auto-incrementato:impedisce la chiave primaria intera autoincrementante?
sqlite> CREATE TABLE foo(bar INTEGER NOT NULL PRIMARY KEY);
sqlite> INSERT INTO foo(bar) VALUES(NULL);
sqlite> SELECT * FROM foo;
1
Nel sqlite docs, mostra che l'aggiunta della parola AUTOINCREMENT
alla colonna dovrebbe creare questo comportamento, ma non sembra essere una parola chiave per prevenire l'incrementazione auto ...
ho anche scoperto che posso costruire SQLite con il SQLITE_OMIT_AUTOINCREMENT
compile option, ma io non voglio disabilitare il comportamento a livello globale, solo per questa particolare colonna.
È interessante notare che, se non si include il vincolo PRIMARY KEY
, ottengo il comportamento desiderato:
sqlite> CREATE TABLE FOO(bar integer NOT NULL);
sqlite> INSERT INTO FOO(bar) VALUES(NULL);
SQL error: foo.bar may not be NULL
Come posso definire la tabella in modo che i valori NULL sono rifiutati e mantenere il vincolo di chiave primaria?
wow, proprio lì nella documentazione ...: D –
Probabilmente vuoi anche combinare UNIQUE con NOT NULL per impedire la creazione di record "idless" nella tua tabella. – Timo