SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite - Eine Tabelle ändern

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 oder UNIQUE 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 als NULL 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