SQLite ALTER TABLE

Resumo : neste tutorial, você aprenderá como usar ALTER TABLEa instrução SQLite para alterar a estrutura de uma tabela existente.

Ao contrário do padrão SQL e de outros sistemas de banco de dados, o SQLite suporta uma funcionalidade muito limitada da ALTER TABLEinstrução.

Usando uma ALTER TABLEinstrução SQLite, você pode realizar duas ações:

  1. Renomeie uma tabela.
  2. Adicione uma nova coluna a uma tabela.
  3. Renomear uma coluna (adicionado com suporte na versão 3.20.0)

Usando SQLite ALTER TABLE para renomear uma tabela

Para renomear uma tabela, você usa a seguinte ALTER TABLE RENAME TOinstrução:

ALTER TABLE existing_table
RENAME TO new_table;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Estes são pontos importantes que você deve saber antes de renomear uma tabela:

  • O ALTER TABLEúnico renomeia uma tabela dentro de um banco de dados. Você não pode usá-lo para mover a tabela entre os bancos de dados anexados.
  • Os objetos de banco de dados, como índices e gatilhos associados à tabela, serão associados à nova tabela.
  • Se uma tabela for referenciada por visualizações ou instruções em gatilhos , você deverá alterar manualmente a definição de visualizações e gatilhos.

Vejamos um exemplo de renomeação de uma tabela.

Primeiro, crie uma tabela chamada devicesque possua três colunas: name, model, serial; e insira uma nova linha na devicestabela.

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');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

Segundo, use a ALTER TABLE RENAME TOinstrução para alterar a devicestabela para equipmenttabela da seguinte maneira:

ALTER TABLE devices
RENAME TO equipment;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

Terceiro, consulte os dados da equipmenttabela para verificar a RENAMEoperação.

SELECT
	name,
	model,
	serial
FROM
	equipment;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

Usando SQLite ALTER TABLE para adicionar uma nova coluna a uma tabela

Você pode usar a instrução SQLite ALTER TABLEpara adicionar uma nova coluna a uma tabela existente. Neste cenário, o SQLite anexa a nova coluna no final da lista de colunas existente.

O seguinte ilustra a sintaxe da ALTER TABLE ADD COLUMNinstrução:

ALTER TABLE table_name
ADD COLUMN column_definition;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Existem algumas restrições na nova coluna:

  • A nova coluna não pode ter uma restrição UNIQUEou PRIMARY KEY .
  • Se a nova coluna tiver uma NOT NULLrestrição, você deverá especificar um valor padrão para a coluna diferente de um NULLvalor.
  • A nova coluna não pode ter o padrão CURRENT_TIMESTAMP, CURRENT_DATE, e CURRENT_TIME, ou uma expressão.
  • Se a nova coluna for uma chave estrangeira e a verificação de restrição de chave estrangeira estiver habilitada, a nova coluna deverá aceitar um valor padrão NULL.

Por exemplo, você pode adicionar uma nova coluna chamada locationà equipmenttabela:

ALTER TABLE equipment 
ADD COLUMN location text;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

Usando SQLite ALTER TABLE para renomear uma coluna

SQLite adicionou suporte para renomear uma coluna usando ALTER TABLE RENAME COLUMNinstrução na versão 3.20.0

O seguinte mostra a sintaxe da ALTER TABLE RENAME COLUMNinstrução:

ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;

Para obter mais informações sobre como renomear uma coluna, confira o tutorial sobre renomeação de coluna .

Usando SQLite ALTER TABLE para outras ações

Se você quiser realizar outras ações, por exemplo, eliminar uma coluna, siga as seguintes etapas:

SQLite-ALTER-TABLE-Etapas

O script a seguir ilustra as etapas acima:

-- 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;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

ALTER TABLE DROP COLUMNExemplo SQLite

SQLite não suporta ALTER TABLE DROP COLUMNinstrução. Para eliminar uma coluna, você precisa seguir as etapas acima.

O script a seguir cria duas tabelas users e insere dados nessas tabelas favorites:

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);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A instrução a seguir retorna dados da userstabela:

SELECT * FROM users;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

E a seguinte instrução retorna os dados da favoritestabela:

SELECT * FROM favorites;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Suponha que você queira eliminar a coluna phoneda userstabela.

Primeiro, desative a verificação de restrição de chave estrangeira:

PRAGMA foreign_keys=off;

Segundo, inicie uma nova transação :

BEGIN TRANSACTION;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, crie uma nova tabela para armazenar os dados da userstabela, exceto a phonecoluna:

CREATE TABLE IF NOT EXISTS persons (
	UserId INTEGER PRIMARY KEY,
	FirstName TEXT NOT NULL,
	LastName TEXT NOT NULL,
	Email TEXT NOT NULL
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quarto, copie os dados da tabela usersto persons:

INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email 
FROM users;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quinto, solte a userstabela:

DROP TABLE users;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Sexto, renomeie a personstabela para userstabela:

ALTER TABLE persons RENAME TO users;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Sétimo, confirme a transação:

COMMIT;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Oitavo, ative a verificação de restrição de chave estrangeira:

PRAGMA foreign_keys=on;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Aqui está a userstabela depois de eliminar a phonecoluna:

SELECT * FROM users;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Resumo

  • Use a ALTER TABLEinstrução para modificar a estrutura de uma tabela existente.
  • Use ALTER TABLE table_name RENAME TO new_namea instrução para renomear uma tabela.
  • Use ALTER TABLE table_name ADD COLUMN column_definitiona instrução para adicionar uma coluna a uma tabela.
  • Use ALTER TABLE table_name RENAME COLUMN current_name TO new_namepara renomear uma coluna.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *