SQLite
 sql >> Database >  >> RDS >> SQLite

La chiave PRIMARY di SQLite AutoIncrement non funziona

Dalla documentazione:

Una tabella creata utilizzando CREATE TABLE AS non ha PRIMARY KEY e nessun tipo di vincoli. Il valore predefinito di ogni colonna è NULL.

Non è necessario aggiungere UNIQUE vincolo su una COLONNA che ha PRIMARY KEY vincolo.
Spiegazione:

Un vincolo UNIQUE è simile a un vincolo PRIMARY KEY, tranne per il fatto che una singola tabella può avere un numero qualsiasi di vincoli UNIQUE.

Invece aggiungi NOT NULL .Ecco perché:

Secondo lo standard SQL, PRIMARY KEY dovrebbe sempre implicare NOTNULL. Sfortunatamente, a causa di un bug in alcune prime versioni, questo non è il caso di SQLite. A meno che la colonna non sia una CHIAVE PRIMARIA INTEGER o la tabella non sia una tabella SENZA ROWID o la colonna sia dichiarata NOT NULL, SQLite consente valori NULL in una colonna CHIAVE PRIMARIA. SQLite potrebbe essere corretto per conformarsi allo standard, ma ciò potrebbe interrompere le applicazioni legacy. Pertanto, è stato deciso di documentare semplicemente il fatto che SQLite consente NULL nella maggior parte delle colonne PRIMARY KEY.


Consiglio di utilizzare questa definizione di colonna:

CREATE TABLE conversations (
    conversation_id INTEGER PRIMARY KEY NOT NULL AUTOINCREMENT,
...
}