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 KEYoUNIQUEvincolo. - La nuova colonna non può avere un valore predefinito di
CURRENT_TIME,CURRENT_DATE,CURRENT_TIMESTAMP, o un'espressione tra parentesi. - Se un
NOT NULLviene 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
REFERENCESviene aggiunta la clausola, la colonna deve avere un valore predefinito diNULL. - Se la nuova colonna è una colonna generata, non può essere
STOREDcolonna. Può essere unVIRTUALcolonna 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 .