SQLite
 sql >> Database >  >> RDS >> SQLite

SQLite - Modifica una tabella

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 o UNIQUE 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 da NULL .
  • 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