Quiero eliminar o agregar una columna en la base de datos sqlite
Estoy usando la siguiente consulta para eliminar la columna.
ALTER TABLE TABLENAME DROP COLUMN COLUMNNAME
Pero da error
System.Data.SQLite.SQLiteException: SQLite error
near "DROP": syntax error
Respuestas:
ALTER TABLE SQLite
Usted puede:
fuente
PRAGMA foreign_keys=OFF
. En este caso, después de hacer esta secuencia, se debe llamarPRAGMA foreign_keys=ON
para volver a habilitar las claves externas.RENAME COLUMN
es compatible. 🎉 sqlite.org/releaselog/3_25_0.htmlEscribí una implementación de Java basada en la forma recomendada de Sqlite para hacer esto:
Para obtener la columna de la tabla, utilicé "PRAGMA table_info":
De hecho, escribí sobre eso en mi blog, puedes ver más explicaciones allí:
http://udinic.wordpress.com/2012/05/09/sqlite-drop-column-support/
fuente
INSERT
declaración, también puede crear la nueva tabla haciendo un"CREAT TABLE" + tableName + "AS SELECT " + columnsSeperated + " FROM " + tableName + "_old;"
Como otros han señalado
fuente: http://www.sqlite.org/lang_altertable.html
Si bien siempre puede crear una nueva tabla y luego soltar la anterior. Trataré de explicar esta solución con un ejemplo.
Ahora desea eliminar la columna
height
de esta tabla.Crea otra tabla llamada
new_person
Ahora copie los datos de la tabla anterior
Ahora suelte la
person
tabla y cambie el nombrenew_person
aperson
Así que ahora si haces un
.schema
, verásfuente
CREATE TABLE new_person AS SELECT id, first_name, last_name, age FROM person;
http://www.sqlite.org/lang_altertable.html
Como puede ver en el diagrama, solo se admite AGREGAR COLUMNA. Sin embargo, hay una solución (algo pesada): http://www.sqlite.org/faq.html#q11
fuente
No podemos soltar una columna específica en SQLite 3. Consulte las preguntas frecuentes .
fuente
Como otros han señalado, la
ALTER TABLE
declaración de sqlite no es compatibleDROP COLUMN
, y la receta estándar para hacerlo no conserva las restricciones y los índices.Aquí hay un código de Python para hacer esto genéricamente, manteniendo todas las restricciones e índices clave.
¡Haga una copia de seguridad de su base de datos antes de usar! Esta función se basa en el cuidado de la declaración CREATE TABLE original y es potencialmente un poco insegura; por ejemplo, hará lo incorrecto si un identificador contiene una coma o paréntesis incrustados.
Si alguien quisiera contribuir con una mejor manera de analizar el SQL, ¡sería genial!
ACTUALIZACIÓN Encontré una mejor manera de analizar usando el
sqlparse
paquete decódigo abierto. Si hay algún interés, lo publicaré aquí, solo deje un comentario pidiéndolo ...fuente
Reescribí la respuesta @Udinic para que el código genere una consulta de creación de tabla automáticamente . Tampoco necesita
ConnectionSource
. También tiene que hacer esto dentro de una transacción .fuente
DB Browser para SQLite le permite agregar o soltar columnas.
En la vista principal, pestaña Database Structure, haga clic en el nombre de la tabla. Se Modify Tablehabilita un botón , que abre una nueva ventana donde puede seleccionar la columna / campo y eliminarlo.
fuente
puedes usar Sqlitebrowser. En el modo de navegador, para la base de datos y la tabla respectivas, en la pestaña -estructura de base de datos, siguiendo la opción Modificar tabla, se puede eliminar la columna correspondiente.
fuente
He mejorado la respuesta del usuario 2638929 y ahora puede conservar el tipo de columna, la clave principal, el valor predeterminado, etc.
PD. Usé aquí
android.arch.persistence.db.SupportSQLiteDatabase
, pero puedes modificarlo fácilmente para usarandroid.database.sqlite.SQLiteDatabase
fuente
Supongo que lo que quieres hacer es la migración de la base de datos. 'Dejar caer una columna no existe en SQLite. Sin embargo, puede agregar una columna adicional utilizando la consulta de tabla ALTER.
fuente
Puede usar el Administrador de SQlite para cambiar los nombres de columna. Haga clic con el botón derecho en el nombre de la tabla y seleccione Editar tabla. Aquí encontrará la estructura de la tabla y podrá cambiarle el nombre fácilmente.
fuente
Como SQLite tiene compatibilidad limitada con ALTER TABLE, solo puede AGREGAR la columna al final de la tabla O CAMBIAR TABLE_NAME en SQLite.
Aquí está la mejor respuesta de ¿CÓMO ELIMINAR COLUMNA DE SQLITE?
visite Eliminar columna de la tabla SQLite
fuente
Como alternativa:
Si tienes una tabla con esquema
puede usar una
CREATE TABLE...AS
declaración comoCREATE TABLE person2 AS SELECT id, first_name, last_name, age FROM person;
, es decir, omitir las columnas que no desea. Luego suelte laperson
tabla original y cambie el nombre de la nueva.Tenga en cuenta que este método produce una tabla que no tiene CLAVE PRIMARIA ni restricciones. Para preservarlos, utilice los métodos que otros describieron para crear una nueva tabla, o use una tabla temporal como intermediario.
fuente
Esta respuesta a una pregunta diferente está orientada a modificar una columna, pero creo que una parte de la respuesta también podría proporcionar un enfoque útil si tiene muchas columnas y no desea volver a escribir la mayoría a mano para su declaración INSERT:
https://stackoverflow.com/a/10385666
Puede volcar su base de datos como se describe en el enlace anterior, luego tomar la instrucción "crear tabla" y una plantilla "insertar" de ese volcado, luego seguir las instrucciones en la entrada de Preguntas frecuentes de SQLite "¿Cómo agrego o elimino columnas de un archivo existente? tabla en SQLite ". (Las preguntas frecuentes están vinculadas en otra parte de esta página).
fuente
Implementación
Python
basada en información en http://www.sqlite.org/faq.html#q11 .Este script primero crea una tabla temporal aleatoria e inserta datos de solo las columnas necesarias, excepto la que se eliminará. Luego restaura la tabla original basada en la tabla temporal y descarta la tabla temporal.
fuente
Mi solución, solo necesito llamar a este método.
Y método auxiliar para obtener las columnas:
fuente
y solo llama a un método
fuente
Ahora también puede usar el navegador DB para SQLite para manipular columnas
fuente
ejemplo para agregar una columna: -
aquí el alumno es nombre_tabla y TOB es nombre_columna a agregar
Está funcionando y probado.
fuente