SQLite supporta un sottoinsieme limitato dello standard SQL ALTER TABLE
dichiarazione.
In SQLite, il ALTER TABLE
Il comando consente all'utente di rinominare una tabella o di aggiungere una nuova colonna a una tabella esistente.
Aggiungi una colonna
Il ADD COLUMN
la sintassi viene utilizzata per aggiungere una nuova colonna a una tabella esistente.
Aggiungiamo una colonna a Artisti tabella:
ALTER TABLE Artists ADD COLUMN Bio TEXT;
E poi controlla la tabella con il .schema
comando:
sqlite> .schema Artists CREATE TABLE Artists( ArtistId INTEGER PRIMARY KEY, ArtistName TEXT NOT NULL , Bio TEXT);
Le seguenti restrizioni si applicano quando si utilizza ADD COLUMN
sintassi in SQLite:
- La colonna potrebbe non avere una
PRIMARY KEY
oUNIQUE
vincolo. - La colonna potrebbe non avere un valore predefinito di
CURRENT_TIME
,CURRENT_DATE
,CURRENT_TIMESTAMP
, o un'espressione tra parentesi. - Se un
NOT NULL
viene specificato il vincolo, la colonna deve avere un valore predefinito diverso daNULL
. - Se i vincoli di chiave esterna sono abilitati e una colonna con un
REFERENCES
viene aggiunta la clausola, la colonna deve avere un valore predefinito di NULL .
Rinomina una tabella
Il RENAME TO
la sintassi ti permette di cambiare il nome di una tabella.
Rinominiamo una delle nostre tabelle:
ALTER TABLE Albums RENAME TO Albums1;
E controllalo con un .tables
comando:
sqlite> .tables Albums1 Artists
Ora, qualsiasi ulteriore operazione dovrà utilizzare il nuovo nome della tabella. Quindi possiamo selezionare dati come questo:
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
Aggiornamento o eliminazione di colonne
SQLite non supporta clausole come DROP COLUMN
, ALTER COLUMN
e ADD CONSTRAINT
, che fanno parte dello standard SQL.
Tuttavia, ci sono altri modi per fare queste cose con SQLite.
Modificare una colonna
Supponiamo di voler cambiare il nome dell'
Anno
colonna a
ReleaseDate
. Inoltre, vogliamo rimuovere il NOT NULL
restrizione.
Per fare ciò, puoi creare una nuova tabella (con la nuova definizione di colonna), popolare la tabella con i dati della vecchia tabella, quindi una volta completata, eliminare la vecchia tabella e rinominare la nuova per riflettere il nome originale.
Crea la nuova tabella
Innanzitutto, crea la nuova tabella (nota ReleaseDate
invece di Year
).
CREATE TABLE Albums( AlbumId INTEGER PRIMARY KEY, AlbumName TEXT NOT NULL, ReleaseDate TEXT, ArtistId INTEGER NOT NULL, FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId) );
Quindi ora abbiamo le seguenti tabelle nel nostro database:
sqlite> .tables Albums Albums1 Artists
Inserisci dati
Quindi inserisci i dati della vecchia tabella.
Usa un INSERT
istruzione che seleziona i dati dalla vecchia tabella e li inserisce nella nuova tabella. In questo modo:
INSERT INTO Albums (AlbumId, AlbumName, ReleaseDate, ArtistId) SELECT AlbumId, AlbumName, Year, ArtistId FROM Albums1;
Verifica che i dati siano stati inseriti nella nuova tabella:
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
Lascia la vecchia tavola
Ora che la nuova tabella è stata creata e popolata con i dati, possiamo scegliere di rimuovere la vecchia tabella, modificarla o lasciarla così com'è.
Lasciamo perdere per ora, lo rimuoveremo più tardi.
Rilascia una colonna
Per eliminare una colonna, puoi creare una tabella da un SELECT
dichiarazione. Nel SELECT
istruzione, ometti la/le colonna/e che vuoi eliminare — SQLite creerà solo quelle colonne che sono incluse in SELECT
dichiarazione.
CREATE TABLE Albums2 AS SELECT AlbumId, AlbumName, ArtistId FROM Albums1;
E poi controlla che i dati siano stati inseriti correttamente nella nuova tabella:
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
Quindi ora abbiamo le seguenti tabelle nel nostro database:
sqlite> .tables Albums Albums1 Albums2 Artists