SQLite unterstützt eine begrenzte Teilmenge des SQL-Standards ALTER TABLE
Erklärung.
In SQLite die ALTER TABLE
Der Befehl ermöglicht es dem Benutzer, eine Tabelle umzubenennen oder einer vorhandenen Tabelle eine neue Spalte hinzuzufügen.
Spalte hinzufügen
Die ADD COLUMN
Syntax wird verwendet, um einer vorhandenen Tabelle eine neue Spalte hinzuzufügen.
Fügen wir den Künstlern eine Spalte hinzu Tabelle:
ALTER TABLE Artists ADD COLUMN Bio TEXT;
Und dann überprüfen Sie die Tabelle mit dem .schema
Befehl:
sqlite> .schema Artists CREATE TABLE Artists( ArtistId INTEGER PRIMARY KEY, ArtistName TEXT NOT NULL , Bio TEXT);
Bei Verwendung von ADD COLUMN
gelten die folgenden Einschränkungen Syntax in SQLite:
- Die Spalte darf keinen
PRIMARY KEY
haben oderUNIQUE
Einschränkung. - Die Spalte hat möglicherweise keinen Standardwert von
CURRENT_TIME
,CURRENT_DATE
,CURRENT_TIMESTAMP
, oder ein Ausdruck in Klammern. - Wenn ein
NOT NULL
Einschränkung angegeben ist, muss die Spalte einen anderen Standardwert alsNULL
haben . - Wenn Foreign Key Constraints aktiviert sind und eine Spalte mit einem
REFERENCES
-Klausel hinzugefügt wird, muss die Spalte den Standardwert NULL haben .
Tabelle umbenennen
Der RENAME TO
Syntax ermöglicht es Ihnen, den Namen einer Tabelle zu ändern.
Lassen Sie uns eine unserer Tabellen umbenennen:
ALTER TABLE Albums RENAME TO Albums1;
Und überprüfen Sie es mit einer .tables
Befehl:
sqlite> .tables Albums1 Artists
Jetzt müssen alle weiteren Operationen den neuen Namen der Tabelle verwenden. So können wir Daten wie folgt auswählen:
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
Aktualisieren oder Löschen von Spalten
SQLite unterstützt keine Klauseln wie DROP COLUMN
, ALTER COLUMN
und ADD CONSTRAINT
, die Teil des SQL-Standards sind.
Es gibt jedoch andere Möglichkeiten, diese Dinge mit SQLite zu tun.
Spalte ändern
Angenommen, wir möchten den Namen des
Jahres
ändern Spalte auf
ReleaseDate
. Außerdem möchten wir NOT NULL
entfernen Einschränkung.
Dazu können Sie eine neue Tabelle erstellen (mit der neuen Spaltendefinition), die Tabelle mit den Daten aus der alten Tabelle füllen, dann die alte Tabelle löschen und die neue umbenennen, um den ursprünglichen Namen wiederzugeben.
Neue Tabelle erstellen
Erstellen Sie zuerst die neue Tabelle (beachten Sie ReleaseDate
statt Year
).
CREATE TABLE Albums( AlbumId INTEGER PRIMARY KEY, AlbumName TEXT NOT NULL, ReleaseDate TEXT, ArtistId INTEGER NOT NULL, FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId) );
Also haben wir jetzt die folgenden Tabellen in unserer Datenbank:
sqlite> .tables Albums Albums1 Artists
Daten einfügen
Fügen Sie dann die Daten aus der alten Tabelle ein.
Verwenden Sie ein INSERT
Anweisung, die Daten aus der alten Tabelle auswählt und in die neue Tabelle einfügt. So:
INSERT INTO Albums (AlbumId, AlbumName, ReleaseDate, ArtistId) SELECT AlbumId, AlbumName, Year, ArtistId FROM Albums1;
Prüfen Sie, ob die Daten in die neue Tabelle eingefügt wurden:
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
Lassen Sie die alte Tabelle fallen
Nachdem die neue Tabelle erstellt und mit den Daten gefüllt wurde, haben wir die Wahl, die alte Tabelle zu entfernen, zu ändern oder unverändert zu lassen.
Belassen wir es jetzt, wir entfernen es später.
Eine Spalte löschen
Um eine Spalte zu löschen, können Sie eine Tabelle aus einem SELECT
erstellen Erklärung. Im SELECT
lassen Sie die Spalte(n) weg, die Sie löschen möchten – SQLite erstellt nur die Spalten, die in SELECT
enthalten sind Aussage.
CREATE TABLE Albums2 AS SELECT AlbumId, AlbumName, ArtistId FROM Albums1;
Überprüfen Sie dann, ob die Daten erfolgreich in die neue Tabelle eingefügt wurden:
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
Also haben wir jetzt die folgenden Tabellen in unserer Datenbank:
sqlite> .tables Albums Albums1 Albums2 Artists