SQLite obsługuje ograniczony podzbiór standardu SQL ALTER TABLE
oświadczenie.
W SQLite, ALTER TABLE
polecenie pozwala użytkownikowi zmienić nazwę tabeli lub dodać nową kolumnę do istniejącej tabeli.
Dodaj kolumnę
ADD COLUMN
składnia służy do dodawania nowej kolumny do istniejącej tabeli.
Dodajmy kolumnę do Wykonawców tabela:
ALTER TABLE Artists ADD COLUMN Bio TEXT;
A następnie sprawdź tabelę z .schema
polecenie:
sqlite> .schema Artists CREATE TABLE Artists( ArtistId INTEGER PRIMARY KEY, ArtistName TEXT NOT NULL , Bio TEXT);
Podczas korzystania z opcji ADD COLUMN
obowiązują następujące ograniczenia składnia w SQLite:
- Kolumna może nie mieć
PRIMARY KEY
lubUNIQUE
ograniczenie. - Kolumna może nie mieć wartości domyślnej
CURRENT_TIME
,CURRENT_DATE
,CURRENT_TIMESTAMP
lub wyrażenie w nawiasach. - Jeśli
NOT NULL
określono ograniczenie, kolumna musi mieć wartość domyślną inną niżNULL
. - Jeśli włączone są ograniczenia klucza obcego i kolumna z
REFERENCES
została dodana klauzula, kolumna musi mieć wartość domyślną NULL .
Zmień nazwę tabeli
RENAME TO
składnia umożliwia zmianę nazwy tabeli.
Zmieńmy nazwę jednego z naszych stołów:
ALTER TABLE Albums RENAME TO Albums1;
I sprawdź to za pomocą .tables
polecenie:
sqlite> .tables Albums1 Artists
Teraz wszelkie dalsze operacje będą wymagały użycia nowej nazwy tabeli. Możemy więc wybrać dane w ten sposób:
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
Aktualizowanie lub usuwanie kolumn
SQLite nie obsługuje klauzul, takich jak DROP COLUMN
, ALTER COLUMN
i ADD CONSTRAINT
, które są częścią standardu SQL.
Istnieją jednak inne sposoby na zrobienie tego z SQLite.
Zmień kolumnę
Powiedzmy, że chcemy zmienić nazwę
Roku
kolumna do
Data wydania
. Ponadto chcemy usunąć NOT NULL
ograniczenie.
Aby to zrobić, możesz utworzyć nową tabelę (z nową definicją kolumny), wypełnić tabelę danymi ze starej tabeli, a następnie po zakończeniu usunąć starą tabelę i zmienić nazwę nowej, aby odzwierciedlała oryginalną nazwę.
Utwórz nową tabelę
Najpierw utwórz nową tabelę (zwróć uwagę na ReleaseDate
zamiast Year
).
CREATE TABLE Albums( AlbumId INTEGER PRIMARY KEY, AlbumName TEXT NOT NULL, ReleaseDate TEXT, ArtistId INTEGER NOT NULL, FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId) );
W naszej bazie danych mamy teraz następujące tabele:
sqlite> .tables Albums Albums1 Artists
Wstaw dane
Następnie wstaw dane ze starej tabeli.
Użyj INSERT
instrukcja, która wybiera dane ze starej tabeli i wstawia je do nowej tabeli. Tak:
INSERT INTO Albums (AlbumId, AlbumName, ReleaseDate, ArtistId) SELECT AlbumId, AlbumName, Year, ArtistId FROM Albums1;
Sprawdź, czy dane zostały wstawione do nowej tabeli:
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
Upuść stary stół
Teraz, gdy nowa tabela została utworzona i wypełniona danymi, mamy możliwość usunięcia starej tabeli, zmodyfikowania jej lub pozostawienia bez zmian.
Zostawmy to na razie, usuniemy to później.
Upuść kolumnę
Aby usunąć kolumnę, możesz utworzyć tabelę z SELECT
oświadczenie. W SELECT
instrukcji, pomiń kolumny, które chcesz usunąć — SQLite utworzy tylko te kolumny, które są zawarte w SELECT
oświadczenie.
CREATE TABLE Albums2 AS SELECT AlbumId, AlbumName, ArtistId FROM Albums1;
Następnie sprawdź, czy dane zostały pomyślnie wstawione do nowej tabeli:
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
W naszej bazie danych mamy teraz następujące tabele:
sqlite> .tables Albums Albums1 Albums2 Artists