Resumo :neste tutorial, você aprenderá como usar SQLite
ALTER TABLE
instrução para alterar a estrutura de uma tabela existente. Ao contrário do padrão SQL e outros sistemas de banco de dados, o SQLite suporta uma funcionalidade muito limitada do
ALTER TABLE
demonstração. Usando um SQLite
ALTER TABLE
instrução, você pode executar 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, use o seguinte
ALTER TABLE RENAME TO
demonstração:ALTER TABLE existing_table
RENAME TO new_table;
Code language: SQL (Structured Query Language) (sql)
Estes são pontos importantes que você deve saber antes de renomear uma tabela:
- A
ALTER TABLE
apenas 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.
Vamos dar um exemplo de renomeação de uma tabela.
Primeiro, crie uma tabela chamada
devices
que tem três colunas:name,
model
, serial
; e insira uma nova linha nos 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');
Code language: SQL (Structured Query Language) (sql)
Tente
Segundo, use o
ALTER TABLE RENAME TO
instrução para alterar os devices
tabela para equipment
tabela da seguinte forma:ALTER TABLE devices
RENAME TO equipment;
Code language: SQL (Structured Query Language) (sql)
Tente
Terceiro, consulte os dados do
equipment
tabela para verificar o RENAME
Operação. SELECT
name,
model,
serial
FROM
equipment;
Code language: SQL (Structured Query Language) (sql)
Tente
Usando SQLite ALTER TABLE para adicionar uma nova coluna a uma tabela
Você pode usar o SQLite
ALTER TABLE
instrução para adicionar uma nova coluna a uma tabela existente. Nesse cenário, o SQLite anexa a nova coluna no final da lista de colunas existente. O seguinte ilustra a sintaxe de
ALTER TABLE ADD COLUMN
demonstração:ALTER TABLE table_name
ADD COLUMN column_definition;
Code language: SQL (Structured Query Language) (sql)
Existem algumas restrições na nova coluna:
- A nova coluna não pode ter um
UNIQUE
ouPRIMARY KEY
restrição. - Se a nova coluna tiver um
NOT NULL
restrição, você deve especificar um valor padrão para a coluna diferente deNULL
valor. - A nova coluna não pode ter um padrão de
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
para o equipment
tabela:ALTER TABLE equipment
ADD COLUMN location text;
Code language: SQL (Structured Query Language) (sql)
Tente
Usando SQLite ALTER TABLE para renomear uma coluna
SQLite adicionou o suporte para renomear uma coluna usando
ALTER TABLE RENAME COLUMN
declaração na versão 3.20.0 O seguinte mostra a sintaxe do
ALTER TABLE RENAME COLUMN
demonstraçã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 de renomeação de coluna.
Usando SQLite ALTER TABLE para outras ações
Se você quiser realizar outras ações, por exemplo, soltar uma coluna, use 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;
Code language: SQL (Structured Query Language) (sql)
SQLite ALTER TABLE DROP COLUMN
exemplo
SQLite não suporta
ALTER TABLE DROP COLUMN
demonstração. Para descartar uma coluna, você precisa usar as etapas acima. O script a seguir cria duas tabelas
users
e favorites
, e insira os dados nestas tabelas: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)
A instrução a seguir retorna dados dos
users
tabela:SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
E a instrução a seguir retorna os dados dos
favorites
tabela:SELECT * FROM favorites;
Code language: SQL (Structured Query Language) (sql)
Suponha que você queira remover a coluna
phone
dos 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;
Code language: SQL (Structured Query Language) (sql)
Terceiro, crie uma nova tabela para armazenar os dados dos
users
tabela exceto para o phone
coluna: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)
Quarto, copie os dados dos
users
para persons
tabela:INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email
FROM users;
Code language: SQL (Structured Query Language) (sql)
Quinto, elimine os
users
tabela:DROP TABLE users;
Code language: SQL (Structured Query Language) (sql)
Sexto, renomeie as
persons
tabela para users
tabela:ALTER TABLE persons RENAME TO users;
Code language: SQL (Structured Query Language) (sql)
Sétimo, confirme a transação:
COMMIT;
Code language: SQL (Structured Query Language) (sql)
Oitavo, habilite a verificação de restrição de chave estrangeira:
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Aqui estão os
users
table depois de soltar o phone
coluna:SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Resumo
- Use o
ALTER TABLE
instrução para modificar a estrutura de uma tabela existente. - Use
ALTER TABLE table_name RENAME TO new_name
instrução para renomear uma tabela. - Use
ALTER TABLE table_name ADD COLUMN column_definition
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.