Tengo un problema: necesito eliminar una columna de mi base de datos SQLite. Escribí esta consulta
alter table table_name drop column column_name
Pero no funciona. Por favor, ayúdame.
De: http://www.sqlite.org/faq.html :
(11) ¿Cómo agrego o elimino columnas de una tabla existente en SQLite?
SQLite tiene soporte ALTER TABLE limitado que puede usar para agregar una columna al final de una tabla o para cambiar el nombre de una tabla. Si desea realizar cambios más complejos en la estructura de una tabla, tendrá que volver a crear la tabla. Puede guardar los datos existentes en una tabla temporal, eliminar la tabla anterior, crear la nueva tabla y luego copiar los datos de la tabla temporal.
Por ejemplo, suponga que tiene una tabla llamada "t1" con los nombres de columnas "a", "b" y "c" y que desea eliminar la columna "c" de esta tabla. Los siguientes pasos ilustran cómo se puede hacer esto:
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
deCREATE TABLE
.En lugar de eliminar la tabla de respaldo, simplemente cámbiele el nombre ...
fuente
t1
.Para simplificar, ¿por qué no crear la tabla de respaldo a partir de la instrucción select?
fuente
TEXT
.Esta opción solo funciona si puede abrir la base de datos en un navegador de bases de datos como DB Browser para SQLite .
En DB Browser para SQLite:
fuente
=> Cree una nueva tabla directamente con la siguiente consulta:
=> Ahora inserte los datos en table_name de existing_table con la siguiente consulta:
=> Ahora suelte la tabla existente mediante la siguiente consulta:
fuente
Para SQLite3 c ++:
fuente
Hice una función de Python en la que ingresas la tabla y la columna para eliminar como argumentos:
Según la información de las respuestas de Duda y MeBigFatGuy, esto no funcionará si hay una clave externa en la tabla, pero esto se puede solucionar con 2 líneas de código (creando una nueva tabla y no solo cambiando el nombre de la tabla temporal)
fuente
En caso de que alguien necesite una función PHP (casi) lista para usar, lo siguiente se basa en esta respuesta :
En contraste con otras respuestas, el SQL usado en este enfoque parece preservar los tipos de datos de las columnas, mientras que algo como la respuesta aceptada parece resultar en que todas las columnas sean de tipo
TEXT
.Actualización 1:
El SQL utilizado tiene el inconveniente de que las
autoincrement
columnas no se conservan.fuente
Por si acaso pudiera ayudar a alguien como yo.
Basado en el sitio web oficial y la respuesta aceptada , hice un código usando C # que usa System.Data.SQLite paquete NuGet.
Este código también conserva la clave principal y la clave externa .
CÓDIGO en C #:
fuente
Para más información: https://www.techonthenet.com/sqlite/tables/alter_table.php
fuente