Riepilogo :in questo tutorial imparerai come usare SQLite ALTER TABLE
istruzione per modificare la struttura di una tabella esistente.
A differenza dello standard SQL e di altri sistemi di database, SQLite supporta una funzionalità molto limitata di ALTER TABLE
dichiarazione.
Usando un ALTER TABLE
di SQLite dichiarazione, puoi eseguire due azioni:
- Rinomina una tabella.
- Aggiungi una nuova colonna a una tabella.
- Rinomina una colonna (aggiunto supportato nella versione 3.20.0)
Utilizzo di SQLite ALTER TABLE per rinominare una tabella
Per rinominare una tabella, utilizza il seguente ALTER TABLE RENAME TO
dichiarazione:
ALTER TABLE existing_table
RENAME TO new_table;
Code language: SQL (Structured Query Language) (sql)
Questi sono punti importanti che dovresti conoscere prima di rinominare una tabella:
- Il
ALTER TABLE
rinomina solo una tabella all'interno di un database. Non puoi usarlo per spostare la tabella tra i database allegati. - Gli oggetti database come indici e trigger associati alla tabella verranno associati alla nuova tabella.
- Se una tabella è referenziata da viste o istruzioni nei trigger, devi modificare manualmente la definizione di viste e trigger.
Facciamo un esempio di ridenominazione di una tabella.
Innanzitutto, crea una tabella denominata devices
che ha tre colonne:name,
model
, serial
; e inserisci una nuova riga nei devices
tabella.
CREATE TABLE devices (
name TEXT NOT NULL,
model TEXT NOT NULL,
Serial INTEGER NOT NULL UNIQUE
);
INSERT INTO devices (name, model, serial)
VALUES('HP ZBook 17 G3 Mobile Workstation','ZBook','SN-2015');
Code language: SQL (Structured Query Language) (sql)
Provalo
In secondo luogo, usa ALTER TABLE RENAME TO
istruzione per modificare i devices
tabella per equipment
tabella come segue:
ALTER TABLE devices
RENAME TO equipment;
Code language: SQL (Structured Query Language) (sql)
Provalo
Terzo, interroga i dati dall'equipment
tabella per verificare il RENAME
operazione.
SELECT
name,
model,
serial
FROM
equipment;
Code language: SQL (Structured Query Language) (sql)
Provalo
Utilizzo di SQLite ALTER TABLE per aggiungere una nuova colonna a una tabella
Puoi usare SQLite ALTER TABLE
istruzione per aggiungere una nuova colonna a una tabella esistente. In questo scenario, SQLite aggiunge la nuova colonna alla fine dell'elenco di colonne esistente.
Di seguito viene illustrata la sintassi di ALTER TABLE ADD COLUMN
dichiarazione:
ALTER TABLE table_name
ADD COLUMN column_definition;
Code language: SQL (Structured Query Language) (sql)
Ci sono alcune restrizioni sulla nuova colonna:
- La nuova colonna non può avere un
UNIQUE
oPRIMARY KEY
vincolo. - Se la nuova colonna ha un
NOT NULL
vincolo, devi specificare un valore predefinito per la colonna diverso daNULL
valore. - La nuova colonna non può avere un valore predefinito di
CURRENT_TIMESTAMP
,CURRENT_DATE
eCURRENT_TIME
, o un'espressione. - Se la nuova colonna è una chiave esterna e il controllo del vincolo della chiave esterna è abilitato, la nuova colonna deve accettare un valore predefinito
NULL
.
Ad esempio, puoi aggiungere una nuova colonna denominata location
all'equipment
tabella:
ALTER TABLE equipment
ADD COLUMN location text;
Code language: SQL (Structured Query Language) (sql)
Provalo
Utilizzo di SQLite ALTER TABLE per rinominare una colonna
SQLite ha aggiunto il supporto per rinominare una colonna usando ALTER TABLE RENAME COLUMN
dichiarazione nella versione 3.20.0
Di seguito viene mostrata la sintassi di ALTER TABLE RENAME COLUMN
dichiarazione:
ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;
Per ulteriori informazioni su come rinominare una colonna, dai un'occhiata al tutorial sulla ridenominazione delle colonne.
Utilizzo di SQLite ALTER TABLE per altre azioni
Se desideri eseguire altre azioni, ad esempio rilasciare una colonna, segui i passaggi seguenti:
Lo script seguente illustra i passaggi precedenti:
-- disable foreign key constraint check
PRAGMA foreign_keys=off;
-- start a transaction
BEGIN TRANSACTION;
-- Here you can drop column
CREATE TABLE IF NOT EXISTS new_table(
column_definition,
...
);
-- copy data from the table to the new_table
INSERT INTO new_table(column_list)
SELECT column_list
FROM table;
-- drop the table
DROP TABLE table;
-- rename the new_table to the table
ALTER TABLE new_table RENAME TO table;
-- commit the transaction
COMMIT;
-- enable foreign key constraint check
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
SQLite ALTER TABLE DROP COLUMN
esempio
SQLite non supporta ALTER TABLE DROP COLUMN
dichiarazione. Per eliminare una colonna, devi utilizzare i passaggi precedenti.
Lo script seguente crea due tabelle users
e favorites
e inserisci i dati in queste tabelle:
CREATE TABLE users(
UserId INTEGER PRIMARY KEY,
FirstName TEXT NOT NULL,
LastName TEXT NOT NULL,
Email TEXT NOT NULL,
Phone TEXT NOT NULL
);
CREATE TABLE favorites(
UserId INTEGER,
PlaylistId INTEGER,
FOREIGN KEY(UserId) REFERENCES users(UserId),
FOREIGN KEY(PlaylistId) REFERENCES playlists(PlaylistId)
);
INSERT INTO users(FirstName, LastName, Email, Phone)
VALUES('John','Doe','[email protected]','408-234-3456');
INSERT INTO favorites(UserId, PlaylistId)
VALUES(1,1);
Code language: SQL (Structured Query Language) (sql)
La seguente istruzione restituisce i dati dagli users
tabella:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
E la seguente istruzione restituisce i dati dai favorites
tabella:
SELECT * FROM favorites;
Code language: SQL (Structured Query Language) (sql)
Supponiamo di voler eliminare la colonna phone
degli users
tabella.
Innanzitutto, disabilita il controllo del vincolo della chiave esterna:
PRAGMA foreign_keys=off;
In secondo luogo, avvia una nuova transazione:
BEGIN TRANSACTION;
Code language: SQL (Structured Query Language) (sql)
Terzo, crea una nuova tabella per contenere i dati degli users
tabella ad eccezione del phone
colonna:
CREATE TABLE IF NOT EXISTS persons (
UserId INTEGER PRIMARY KEY,
FirstName TEXT NOT NULL,
LastName TEXT NOT NULL,
Email TEXT NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
In quarto luogo, copia i dati dagli users
a persons
tabella:
INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email
FROM users;
Code language: SQL (Structured Query Language) (sql)
Quinto, elimina gli users
tabella:
DROP TABLE users;
Code language: SQL (Structured Query Language) (sql)
Sesto, rinomina le persons
tabella a users
tabella:
ALTER TABLE persons RENAME TO users;
Code language: SQL (Structured Query Language) (sql)
Settimo, conferma la transazione:
COMMIT;
Code language: SQL (Structured Query Language) (sql)
Ottavo, abilita il controllo del vincolo della chiave esterna:
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Ecco gli users
tabella dopo aver rilasciato il phone
colonna:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Riepilogo
- Usa
ALTER TABLE
istruzione per modificare la struttura di una tabella esistente. - Usa
ALTER TABLE table_name RENAME TO new_name
istruzione per rinominare una tabella. - Usa
ALTER TABLE table_name ADD COLUMN column_definition
istruzione per aggiungere una colonna a una tabella. - Usa
ALTER TABLE table_name RENAME COLUMN current_name TO new_name
per rinominare una colonna.