SQLite suporta um subconjunto limitado do padrão SQL
ALTER TABLE
demonstração. No SQLite, o
ALTER TABLE
O comando permite ao usuário renomear uma tabela ou adicionar uma nova coluna a uma tabela existente. Adicionar uma coluna
A
ADD COLUMN
sintaxe é usada para adicionar uma nova coluna a uma tabela existente. Vamos adicionar uma coluna aos Artistas tabela:
Artistas de ALTER TABLE ADICIONAR TEXTO DE BIO DA COLUNA;
E então verifique a tabela com o
.schema
comando:sqlite> .schema ArtistsCREATE TABLE Artists( ArtistId INTEGER PRIMARY KEY, ArtistName TEXT NOT NULL, Bio TEXT);
As seguintes restrições se aplicam ao usar o
ADD COLUMN
sintaxe no SQLite:- A coluna pode não ter uma
PRIMARY KEY
ouUNIQUE
restrição. - A coluna pode não ter um valor padrão de
CURRENT_TIME
,CURRENT_DATE
,CURRENT_TIMESTAMP
, ou uma expressão entre parênteses. - Se um
NOT NULL
restrição for especificada, a coluna deverá ter um valor padrão diferente deNULL
. - Se as restrições de chave estrangeira estiverem habilitadas e uma coluna com
REFERENCES
é adicionada, a coluna deve ter um valor padrão de NULL .
Renomear uma tabela
O
RENAME TO
sintaxe permite que você altere o nome de uma tabela. Vamos renomear uma de nossas tabelas:
Álbuns de ALTER TABLE RENOMEAR PARA Álbuns1;
E verifique com um
.tables
comando:sqlite> .tablesAlbums1 Artistas
Agora, quaisquer outras operações precisarão usar o novo nome da tabela. Assim, podemos selecionar dados como este:
SELECIONAR Nome do Álbum, Ano FROM Artists AS a INNER JOIN Álbuns1 AS r ON a.ArtistId =r.ArtistId WHERE a.ArtistName ='Joe Satriani';
AlbumName Ano -------------------- ------------------------- -------------------------Surfe com o Ali 1987 Flying in a Blue Dre 1989 Black Swans and Worm 2010
Atualizando ou descartando colunas
SQLite não suporta cláusulas como
DROP COLUMN
, ALTER COLUMN
e ADD CONSTRAINT
, que fazem parte do padrão SQL. No entanto, existem outras maneiras de fazer essas coisas com o SQLite.
Alterar uma coluna
Digamos que queremos mudar o nome do Ano coluna para ReleaseDate . Além disso, queremos remover o
NOT NULL
restrição. Para fazer isso, você pode criar uma nova tabela (com a nova definição de coluna), preencher a tabela com os dados da tabela antiga e, depois de concluído, excluir a tabela antiga e renomear a nova para refletir o nome original.
Criar a nova tabela
Primeiro, crie a nova tabela (observe
ReleaseDate
em vez de Year
). CRIAR Álbuns de TABELA( AlbumId INTEGER PRIMARY KEY, AlbumName TEXT NOT NULL, TEXTO de data de lançamento, ArtistId INTEGER NÃO NULO, FOREIGN KEY(ArtistId) REFERÊNCIAS Artistas(ArtistId) );
Portanto, agora temos as seguintes tabelas em nosso banco de dados:
sqlite> .tablesAlbums Albums1 Artistas
Inserir dados
Em seguida, insira os dados da tabela antiga.
Use um
INSERT
instrução que seleciona dados da tabela antiga e os insere na nova tabela. Assim:INSERT INTO Albums (AlbumId, AlbumName, ReleaseDate, ArtistId) SELECT AlbumId, AlbumName, Year, ArtistId DE Álbuns1;
Verifique se os dados foram inseridos na nova tabela:
sqlite> SELECT * FROM Albums;AlbumId AlbumName ReleaseDate ArtistId -------- ---------------------------- --- ----------- ----------1 Killers 1981 7 2 Powerslave 1984 7 3 Surfing with the Alien 1987 1 4 Heavy as a Really Heavy Thing 1995 11 5 Yummy Yummy 1994 17 6 Out of the Loop 2007 6 7 Suck on This 1989 13 8 Pork Soda 1993 13 9 Sailing the Seas of Cheese 1991 13 10 Flying in a Blue Dream 1989 1 11 Black Swans and Wormhole Wizard 2010 1 12 Somewhere in Time 1986 7 13 Grande Carro Vermelho 1995 17
Abandone a Mesa Antiga
Agora que a nova tabela foi criada e preenchida com os dados, temos a opção de remover a tabela antiga, modificá-la ou deixá-la como está.
Vamos deixá-lo por enquanto, vamos removê-lo mais tarde.
Soltar uma coluna
Para remover uma coluna, você pode criar uma tabela a partir de um
SELECT
demonstração. No SELECT
instrução, omita a(s) coluna(s) que você deseja descartar — o SQLite criará apenas as colunas que estão incluídas no SELECT
demonstração. CREATE TABLE Albums2 AS SELECT AlbumId, AlbumName, ArtistId DE Álbuns1;
E, em seguida, verifique se os dados foram inseridos com sucesso na nova tabela:
sqlite> selecione * de Albums2;AlbumId AlbumName ArtistId -------- ----------------------------- -- ----------1 Assassinos 7 2 Powerslave 7 3 Surfando com o Alien 1 4 Pesado como uma Coisa Muito Pesada 11 5 Gostoso Gostoso 17 6 Fora do Loop 6 7 Chupe Este 13 8 Pork Soda 13 9 Navegando pelos mares de queijo 13 10 Voando em um sonho azul 1 11 Cisnes Negros e Mago de Minhoca 1 12 Em Algum Lugar no Tempo 7 13 Carro Vermelho Grande 17
Portanto, agora temos as seguintes tabelas em nosso banco de dados:
sqlite> .tablesAlbums Albums1 Albums2 Artists