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

SQLite - Alterar uma tabela


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 ou UNIQUE 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 de NULL .
  • 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