SQLite podporuje omezenou podmnožinu standardu SQL ALTER TABLE
prohlášení.
V SQLite, ALTER TABLE
umožňuje uživateli přejmenovat tabulku nebo přidat nový sloupec do existující tabulky.
Přidat sloupec
ADD COLUMN
syntaxe se používá k přidání nového sloupce do existující tabulky.
Pojďme přidat sloupec do Umělci tabulka:
ALTER TABLE Artists ADD COLUMN Bio TEXT;
A pak zkontrolujte tabulku s .schema
příkaz:
sqlite> .schema Artists CREATE TABLE Artists( ArtistId INTEGER PRIMARY KEY, ArtistName TEXT NOT NULL , Bio TEXT);
Při použití ADD COLUMN
platí následující omezení syntaxe v SQLite:
- Sloupec možná nemá
PRIMARY KEY
neboUNIQUE
omezení. - Sloupec nemusí mít výchozí hodnotu
CURRENT_TIME
,CURRENT_DATE
,CURRENT_TIMESTAMP
, nebo výraz v závorkách. - Pokud
NOT NULL
omezení, pak musí mít sloupec výchozí hodnotu jinou nežNULL
. - Pokud jsou povolena omezení cizího klíče a sloupec s
REFERENCES
je přidána klauzule, sloupec musí mít výchozí hodnotu NULL .
Přejmenovat tabulku
RENAME TO
syntaxe vám umožňuje změnit název tabulky.
Pojďme přejmenovat jednu z našich tabulek:
ALTER TABLE Albums RENAME TO Albums1;
A zkontrolujte to pomocí .tables
příkaz:
sqlite> .tables Albums1 Artists
Nyní budou muset všechny další operace používat nový název tabulky. Můžeme tedy vybrat data takto:
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
Aktualizace nebo vypuštění sloupců
SQLite nepodporuje klauzule jako DROP COLUMN
, ALTER COLUMN
a ADD CONSTRAINT
, které jsou součástí standardu SQL.
Existují však i jiné způsoby, jak tyto věci dělat s SQLite.
Změnit sloupec
Řekněme, že chceme změnit název
roku
do
Datum vydání
. Také chceme odstranit NOT NULL
omezení.
Chcete-li to provést, můžete vytvořit novou tabulku (s novou definicí sloupce), naplnit tabulku daty ze staré tabulky a po dokončení starou tabulku odstranit a přejmenovat novou tak, aby odpovídala původnímu názvu.
Vytvořte novou tabulku
Nejprve vytvořte novou tabulku (všimněte si ReleaseDate
místo Year
).
CREATE TABLE Albums( AlbumId INTEGER PRIMARY KEY, AlbumName TEXT NOT NULL, ReleaseDate TEXT, ArtistId INTEGER NOT NULL, FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId) );
Nyní tedy máme v databázi následující tabulky:
sqlite> .tables Albums Albums1 Artists
Vložit data
Poté vložte data ze staré tabulky.
Použijte INSERT
příkaz, který vybere data ze staré tabulky a vloží je do nové tabulky. Takhle:
INSERT INTO Albums (AlbumId, AlbumName, ReleaseDate, ArtistId) SELECT AlbumId, AlbumName, Year, ArtistId FROM Albums1;
Ověřte, zda byla data vložena do nové tabulky:
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
Vypustit starou tabulku
Nyní, když je nová tabulka vytvořena a naplněna daty, máme na výběr, zda starou tabulku odstranit, upravit nebo ponechat tak, jak je.
Necháme to zatím, odstraníme to později.
Přetáhněte sloupec
Chcete-li sloupec zrušit, můžete vytvořit tabulku z SELECT
prohlášení. V SELECT
vynechejte sloupce, které chcete vypustit — SQLite vytvoří pouze ty sloupce, které jsou zahrnuty v SELECT
prohlášení.
CREATE TABLE Albums2 AS SELECT AlbumId, AlbumName, ArtistId FROM Albums1;
A pak zkontrolujte, zda byla data úspěšně vložena do nové tabulky:
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
Nyní tedy máme v databázi následující tabulky:
sqlite> .tables Albums Albums1 Albums2 Artists