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

SQLite ALTER TABLE

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:

  1. Rinomina una tabella.
  2. Aggiungi una nuova colonna a una tabella.
  3. 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 o PRIMARY KEY vincolo.
  • Se la nuova colonna ha un NOT NULL vincolo, devi specificare un valore predefinito per la colonna diverso da NULL valore.
  • La nuova colonna non può avere un valore predefinito di CURRENT_TIMESTAMP , CURRENT_DATE e CURRENT_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.