Resumo : neste tutorial, você aprenderá como usar ALTER TABLE
a 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 TABLE
instrução.
Usando uma ALTER TABLE
instrução SQLite, você pode realizar duas ações:
- Renomeie uma tabela.
- Adicione uma nova coluna a uma tabela.
- 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 TO
instruçã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 devices
que possua três colunas: name,
model
, serial
; e insira uma nova linha na devices
tabela.
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 )
Segundo, use a ALTER TABLE RENAME TO
instrução para alterar a devices
tabela para equipment
tabela da seguinte maneira:
ALTER TABLE devices
RENAME TO equipment;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, consulte os dados da equipment
tabela para verificar a RENAME
operação.
SELECT
name,
model,
serial
FROM
equipment;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Usando SQLite ALTER TABLE para adicionar uma nova coluna a uma tabela
Você pode usar a instrução SQLite ALTER TABLE
para 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 COLUMN
instruçã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
UNIQUE
ouPRIMARY KEY
. - Se a nova coluna tiver uma
NOT NULL
restrição, você deverá especificar um valor padrão para a coluna diferente de umNULL
valor. - A nova coluna não pode ter o padrão
CURRENT_TIMESTAMP
,CURRENT_DATE
, eCURRENT_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
à equipment
tabela:
ALTER TABLE equipment
ADD COLUMN location text;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Usando SQLite ALTER TABLE para renomear uma coluna
SQLite adicionou suporte para renomear uma coluna usando ALTER TABLE RENAME COLUMN
instrução na versão 3.20.0
O seguinte mostra a sintaxe da ALTER TABLE RENAME COLUMN
instruçã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:
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 COLUMN
Exemplo SQLite
SQLite não suporta ALTER TABLE DROP COLUMN
instruçã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 users
tabela:
SELECT * FROM users;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
E a seguinte instrução retorna os dados da favorites
tabela:
SELECT * FROM favorites;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Suponha que você queira eliminar a coluna phone
da users
tabela.
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 users
tabela, exceto a phone
coluna:
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 users
to 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 users
tabela:
DROP TABLE users;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Sexto, renomeie a persons
tabela para users
tabela:
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 users
tabela depois de eliminar a phone
coluna:
SELECT * FROM users;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Resumo
- Use a
ALTER TABLE
instrução para modificar a estrutura de uma tabela existente. - Use
ALTER TABLE table_name RENAME TO new_name
a instrução para renomear uma tabela. - Use
ALTER TABLE table_name ADD COLUMN column_definition
a instrução para adicionar uma coluna a uma tabela. - Use
ALTER TABLE table_name RENAME COLUMN current_name TO new_name
para renomear uma coluna.