I SQLite kan du använda ALTER TABLE
för att lägga till en kolumn i en befintlig tabell.
Detta är faktiskt en av de få saker du kan göra med ALTER TABLE
uttalande i SQLite. Det enda du kan göra med ALTER TABLE
sats i SQLite är att byta namn på en tabell, byta namn på en kolumn och lägga till en ny kolumn till en befintlig tabell.
Exempel 1
Föreställ dig att vi har följande tabell:
CREATE TABLE Cats(
CatId INTEGER PRIMARY KEY,
CatName
);
Och vi vill nu lägga till en kolumn som heter DOB . Vi skulle kunna göra det med följande kod:
ALTER TABLE Cats ADD COLUMN DOB;
Så enkelt är det.
Begränsningar
Du kan också ange andra specifikationer till definitionen, såsom begränsningar, etc, men det finns vissa begränsningar.
I synnerhet:
- Den nya kolumnen kan inte ha en
PRIMARY KEY
ellerUNIQUE
begränsning. - Den nya kolumnen kan inte ha ett standardvärde på
CURRENT_TIME
,CURRENT_DATE
,CURRENT_TIMESTAMP
, eller ett uttryck inom parentes. - Om en
NOT NULL
begränsning anges, måste kolumnen ha ett annat standardvärde änNULL
. - Om begränsningar för främmande nyckel är aktiverade och en kolumn med
REFERENCES
sats läggs till, måste kolumnen ha standardvärdetNULL
. - Om den nya kolumnen är en genererad kolumn kan den inte
STORED
kolumn. Det kan vara enVIRTUAL
kolumn dock.
Exempel 2
Här är ett annat exempel, den här gången lägger jag till några fler specifikationer till definitionen av den nya kolumnen:
CREATE TABLE Dogs(
DogId INTEGER PRIMARY KEY,
DogName
);
Och vi vill nu lägga till en kolumn som heter DOB . Vi skulle kunna göra det med följande kod:
ALTER TABLE Dogs
ADD COLUMN Score NOT NULL DEFAULT 0;
Kontrollera ändringarna
Det finns flera sätt att kontrollera strukturen för en tabell i SQLite.
Ett sätt är att använda PRAGMA table_info()
uttalande.
PRAGMA table_info(Dogs);
Resultat:
cid name type notnull dflt_value pk --- ------- ------- ---------- ---------- -- 0 DogId INTEGER 0 1 1 DogName 0 0 2 Score 1 0 0
Vi kan se den nya kolumnen, och vi kan se att den har en NOT NULL
begränsning och att dess standardvärde är 0 .