Estou com um problema: preciso excluir uma coluna do meu banco de dados SQLite. Eu escrevi esta consulta
alter table table_name drop column column_name
mas não funciona. Por favor me ajude.
De: http://www.sqlite.org/faq.html :
(11) Como adiciono ou excluo colunas de uma tabela existente no SQLite.
O SQLite limitou o suporte ALTER TABLE que você pode usar para adicionar uma coluna ao final de uma tabela ou para alterar o nome de uma tabela. Se você quiser fazer mudanças mais complexas na estrutura de uma tabela, terá que recriá-la. Você pode salvar os dados existentes em uma tabela temporária, eliminar a tabela antiga, criar a nova tabela e, em seguida, copiar os dados de volta da tabela temporária.
Por exemplo, suponha que você tenha uma tabela chamada "t1" com os nomes de colunas "a", "b" e "c" e que deseja excluir a coluna "c" dessa tabela. As etapas a seguir ilustram como isso pode ser feito:
BEGIN TRANSACTION; CREATE TEMPORARY TABLE t1_backup(a,b); INSERT INTO t1_backup SELECT a,b FROM t1; DROP TABLE t1; CREATE TABLE t1(a,b); INSERT INTO t1 SELECT a,b FROM t1_backup; DROP TABLE t1_backup; COMMIT;
TEMPORARY
a partirCREATE TABLE
.Em vez de descartar a tabela de backup, apenas renomeie-a ...
fonte
t1
.Para simplificar, por que não criar a tabela de backup a partir da instrução select?
fonte
TEXT
.Esta opção funciona apenas se você puder abrir o banco de dados em um navegador de banco de dados como o navegador de banco de dados para SQLite .
No DB Browser para SQLite:
fonte
=> Crie uma nova tabela diretamente com a seguinte consulta:
=> Agora insira os dados em table_name de existing_table com a seguinte consulta:
=> Agora, elimine a existing_table seguindo a consulta:
fonte
Eu fiz uma função Python onde você insere a tabela e a coluna para remover como argumentos:
De acordo com as informações sobre as respostas de Duda e MeBigFatGuy, isso não funcionará se houver uma chave estrangeira na tabela, mas isso pode ser corrigido com 2 linhas de código (criando uma nova tabela e não apenas renomeando a tabela temporária)
fonte
Para SQLite3 c ++:
fonte
Caso alguém precise de uma função PHP (quase) pronta para usar, o seguinte é baseado nesta resposta :
Em contraste com outras respostas, o SQL usado nesta abordagem parece preservar os tipos de dados das colunas, enquanto algo como a resposta aceita parece resultar em todas as colunas do tipo
TEXT
.Atualização 1:
O SQL usado tem a desvantagem de que as
autoincrement
colunas são não preservadas.fonte
Para o caso de poder ajudar alguém como eu.
Com base no site oficial e na resposta Aceito , fiz um código em C # que usa System.Data.SQLite pacote NuGet.
Este código também preserva a chave primária e a chave estrangeira .
CÓDIGO em C #:
fonte
Para mais informações: https://www.techonthenet.com/sqlite/tables/alter_table.php
fonte