В SQLite можете да използвате ALTER TABLE
оператор за добавяне на колона към съществуваща таблица.
Това всъщност е едно от малкото неща, които можете да правите с ALTER TABLE
изявление в SQLite. Единствените неща, които можете да правите с ALTER TABLE
оператор в SQLite е преименуване на таблица, преименуване на колона и добавяне на нова колона към съществуваща таблица.
Пример 1
Представете си, че имаме следната таблица:
CREATE TABLE Cats(
CatId INTEGER PRIMARY KEY,
CatName
);
И сега искаме да добавим колона, наречена DOB . Можем да направим това с помощта на следния код:
ALTER TABLE Cats ADD COLUMN DOB;
Това е толкова просто.
Ограничения
Можете също да предоставите други спецификации към дефиницията, като ограничения и т.н., но има някои ограничения.
По-специално:
- Новата колона не може да има
PRIMARY KEY
илиUNIQUE
ограничение. - Новата колона не може да има стойност по подразбиране
CURRENT_TIME
,CURRENT_DATE
,CURRENT_TIMESTAMP
, или израз в скоби. - Ако
NOT NULL
е посочено ограничение, тогава колоната трябва да има стойност по подразбиране, различна отNULL
. - Ако ограниченията на външния ключ са разрешени и колона с
REFERENCES
се добавя клауза, колоната трябва да има стойност по подразбиранеNULL
. - Ако новата колона е генерирана колона, тя не може да бъде
STORED
колона. Може да бъдеVIRTUAL
колона обаче.
Пример 2
Ето още един пример, този път добавям още спецификации към дефиницията на новата колона:
CREATE TABLE Dogs(
DogId INTEGER PRIMARY KEY,
DogName
);
И сега искаме да добавим колона, наречена DOB . Можем да направим това с помощта на следния код:
ALTER TABLE Dogs
ADD COLUMN Score NOT NULL DEFAULT 0;
Проверете промените
Има няколко начина за проверка на структурата на таблица в SQLite.
Един от начините е да използвате PRAGMA table_info()
изявление.
PRAGMA table_info(Dogs);
Резултат:
cid name type notnull dflt_value pk --- ------- ------- ---------- ---------- -- 0 DogId INTEGER 0 1 1 DogName 0 0 2 Score 1 0 0
Можем да видим новата колона и можем да видим, че има NOT NULL
ограничение и че стойността му по подразбиране е 0 .