In SQLite, puoi usare ALTER TABLE
istruzione per aggiungere una colonna a una tabella esistente.
Questa è in realtà una delle poche cose che puoi fare con ALTER TABLE
istruzione in SQLite. Le uniche cose che puoi fare con ALTER TABLE
L'istruzione in SQLite è rinominare una tabella, rinominare una colonna e aggiungere una nuova colonna a una tabella esistente.
Esempio 1
Immagina di avere la seguente tabella:
CREATE TABLE Cats(
CatId INTEGER PRIMARY KEY,
CatName
);
E ora vogliamo aggiungere una colonna chiamata DOB . Potremmo farlo usando il seguente codice:
ALTER TABLE Cats ADD COLUMN DOB;
È così semplice.
Restrizioni
Puoi anche fornire altre specifiche alla definizione, come vincoli, ecc., ma ci sono alcune restrizioni.
In particolare:
- La nuova colonna non può avere una
PRIMARY KEY
oUNIQUE
vincolo. - La nuova colonna non può avere un valore predefinito di
CURRENT_TIME
,CURRENT_DATE
,CURRENT_TIMESTAMP
, o un'espressione tra parentesi. - Se un
NOT NULL
viene specificato il vincolo, la colonna deve avere un valore predefinito diverso daNULL
. - Se i vincoli di chiave esterna sono abilitati e una colonna con un
REFERENCES
viene aggiunta la clausola, la colonna deve avere un valore predefinito diNULL
. - Se la nuova colonna è una colonna generata, non può essere
STORED
colonna. Può essere unVIRTUAL
colonna però.
Esempio 2
Ecco un altro esempio, questa volta aggiungo qualche specifica in più alla definizione della nuova colonna:
CREATE TABLE Dogs(
DogId INTEGER PRIMARY KEY,
DogName
);
E ora vogliamo aggiungere una colonna chiamata DOB . Potremmo farlo usando il seguente codice:
ALTER TABLE Dogs
ADD COLUMN Score NOT NULL DEFAULT 0;
Controlla le modifiche
Esistono diversi modi per controllare la struttura di una tabella in SQLite.
Un modo è usare PRAGMA table_info()
dichiarazione.
PRAGMA table_info(Dogs);
Risultato:
cid name type notnull dflt_value pk --- ------- ------- ---------- ---------- -- 0 DogId INTEGER 0 1 1 DogName 0 0 2 Score 1 0 0
Possiamo vedere la nuova colonna e possiamo vedere che ha un NOT NULL
vincolo e che il suo valore predefinito è 0 .