SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

SQLite ALTER TABLE


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:
  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, 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 ou PRIMARY KEY restrição.
  • Se a nova coluna tiver um NOT NULL restrição, você deve especificar um valor padrão para a coluna diferente de NULL valor.
  • A nova coluna não pode ter um padrão de 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 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.