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 TABLEapenas 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
UNIQUEouPRIMARY KEYrestrição. - Se a nova coluna tiver um
NOT NULLrestrição, você deve especificar um valor padrão para a coluna diferente deNULLvalor. - A nova coluna não pode ter um padrão de
CURRENT_TIMESTAMP,CURRENT_DATEeCURRENT_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','john.doe@example.com','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 TABLEinstrução para modificar a estrutura de uma tabela existente. - Use
ALTER TABLE table_name RENAME TO new_nameinstrução para renomear uma tabela. - Use
ALTER TABLE table_name ADD COLUMN column_definitioninstrução para adicionar uma coluna a uma tabela. - Use
ALTER TABLE table_name RENAME COLUMN current_name TO new_namepara renomear uma coluna.