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 KEYneboUNIQUEomezení. - Sloupec nemusí mít výchozí hodnotu
CURRENT_TIME,CURRENT_DATE,CURRENT_TIMESTAMP, nebo výraz v závorkách. - Pokud
NOT NULLomezení, pak musí mít sloupec výchozí hodnotu jinou nežNULL. - Pokud jsou povolena omezení cizího klíče a sloupec s
REFERENCESje 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