SQLite поддържа ограничено подмножество от стандарта на SQL ALTER TABLE
изявление.
В SQLite, ALTER TABLE
командата позволява на потребителя да преименува таблица или да добави нова колона към съществуваща таблица.
Добавяне на колона
ADD COLUMN
синтаксисът се използва за добавяне на нова колона към съществуваща таблица.
Нека добавим колона към Изпълнители таблица:
ALTER TABLE Artists ADD COLUMN Bio TEXT;
След това проверете таблицата с .schema
команда:
sqlite> .schema Artists CREATE TABLE Artists( ArtistId INTEGER PRIMARY KEY, ArtistName TEXT NOT NULL , Bio TEXT);
Следните ограничения важат при използване на ADD COLUMN
синтаксис в SQLite:
- Колоната може да няма
PRIMARY KEY
илиUNIQUE
ограничение. - Колоната може да няма стойност по подразбиране
CURRENT_TIME
,CURRENT_DATE
,CURRENT_TIMESTAMP
, или израз в скоби. - Ако
NOT NULL
е посочено ограничение, тогава колоната трябва да има стойност по подразбиране, различна отNULL
. - Ако ограниченията на външния ключ са разрешени и колона с
REFERENCES
се добавя клауза, колоната трябва да има стойност по подразбиране NULL .
Преименувайте таблица
RENAME TO
синтаксисът ви позволява да промените името на таблица.
Нека преименуваме една от нашите таблици:
ALTER TABLE Albums RENAME TO Albums1;
И го проверете с .tables
команда:
sqlite> .tables Albums1 Artists
Сега всички по-нататъшни операции ще трябва да използват новото име на таблицата. Така че можем да изберем данни като това:
SELECT AlbumName, Year FROM Artists AS a INNER JOIN Albums1 AS r ON a.ArtistId = r.ArtistId WHERE a.ArtistName = 'Joe Satriani';
AlbumName Year -------------------- -------------------------------------------------- Surfing with the Ali 1987 Flying in a Blue Dre 1989 Black Swans and Worm 2010
Актуализиране или премахване на колони
SQLite не поддържа клаузи като DROP COLUMN
, ALTER COLUMN
и ADD CONSTRAINT
, които са част от стандарта SQL.
Има обаче други начини да направите тези неща със SQLite.
Промяна на колона
Да кажем, че искаме да променим името на
Година
колона до
ReleaseDate
. Също така искаме да премахнем NOT NULL
ограничение.
За да направите това, можете да създадете нова таблица (с новата дефиниция на колона), да попълните таблицата с данните от старата таблица, след което след като приключите, да изтриете старата таблица и да преименувате новата, за да отразява оригиналното име.
Създайте новата таблица
Първо създайте новата таблица (забележете ReleaseDate
вместо Year
).
CREATE TABLE Albums( AlbumId INTEGER PRIMARY KEY, AlbumName TEXT NOT NULL, ReleaseDate TEXT, ArtistId INTEGER NOT NULL, FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId) );
Така че вече имаме следните таблици в нашата база данни:
sqlite> .tables Albums Albums1 Artists
Вмъкване на данни
След това поставете данните от старата таблица.
Използвайте INSERT
оператор, който избира данни от старата таблица и ги вмъква в новата таблица. Като това:
INSERT INTO Albums (AlbumId, AlbumName, ReleaseDate, ArtistId) SELECT AlbumId, AlbumName, Year, ArtistId FROM Albums1;
Проверете дали данните са били вмъкнати в новата таблица:
sqlite> SELECT * FROM Albums; AlbumId AlbumName ReleaseDate ArtistId -------- ------------------------------- ----------- ---------- 1 Killers 1981 7 2 Powerslave 1984 7 3 Surfing with the Alien 1987 1 4 Heavy as a Really Heavy Thing 1995 11 5 Yummy Yummy 1994 17 6 Out of the Loop 2007 6 7 Suck on This 1989 13 8 Pork Soda 1993 13 9 Sailing the Seas of Cheese 1991 13 10 Flying in a Blue Dream 1989 1 11 Black Swans and Wormhole Wizard 2010 1 12 Somewhere in Time 1986 7 13 Big Red Car 1995 17
Изхвърлете старата таблица
Сега, когато новата таблица е създадена и попълнена с данните, имаме избор да премахнем старата таблица, да я модифицираме или да я оставим такава, каквато е.
Нека го оставим засега, ще го премахнем по-късно.
Пуснете колона
За да пуснете колона, можете да създадете таблица от SELECT
изявление. В SELECT
изявление, пропуснете колоните, които искате да изпуснете — SQLite ще създаде само онези колони, които са включени в SELECT
изявление.
CREATE TABLE Albums2 AS SELECT AlbumId, AlbumName, ArtistId FROM Albums1;
След това проверете дали данните са успешно вмъкнати в новата таблица:
sqlite> select * from Albums2; AlbumId AlbumName ArtistId -------- ------------------------------- ---------- 1 Killers 7 2 Powerslave 7 3 Surfing with the Alien 1 4 Heavy as a Really Heavy Thing 11 5 Yummy Yummy 17 6 Out of the Loop 6 7 Suck on This 13 8 Pork Soda 13 9 Sailing the Seas of Cheese 13 10 Flying in a Blue Dream 1 11 Black Swans and Wormhole Wizard 1 12 Somewhere in Time 7 13 Big Red Car 17
Така че вече имаме следните таблици в нашата база данни:
sqlite> .tables Albums Albums1 Albums2 Artists