Solución:
Supongamos que tiene una tabla y necesita cambiar el nombre de “colb” a “col_b”:
Primero, cambia el nombre de la tabla anterior:
ALTER TABLE orig_table_name RENAME TO tmp_table_name;
Luego cree la nueva tabla, basada en la tabla anterior pero con el nombre de columna actualizado:
CREATE TABLE orig_table_name (
col_a INT
, col_b INT
);
Luego copie el contenido frente a la tabla original.
INSERT INTO orig_table_name(col_a, col_b)
SELECT col_a, colb
FROM tmp_table_name;
Por último, deja la mesa vieja.
DROP TABLE tmp_table_name;
Envolviendo todo esto en un BEGIN TRANSACTION;
y COMMIT;
también es probablemente una buena idea.
Esto se acaba de arreglar con 2018-09-15 (3.25.0)
Mejoras el
ALTER TABLE
mando:
- Agregue soporte para cambiar el nombre de columnas dentro de una tabla usando
ALTER TABLE
mesaRENAME COLUMN oldname TO newname
.- Corrija la función de cambio de nombre de la tabla para que también actualice las referencias a la tabla renombrada en desencadenadores y vistas.
Puede encontrar la nueva sintaxis documentada en ALTER TABLE
los
RENAME COLUMN TO
la sintaxis cambia el nombre-columna de la tabla nombre-tabla a nombre-nueva-columna. El nombre de la columna se cambia tanto dentro de la propia definición de la tabla como dentro de todos los índices, desencadenadores y vistas que hacen referencia a la columna. Si el cambio de nombre de la columna da como resultado una ambigüedad semántica en un disparador o vista, entonces elRENAME COLUMN
falla con un error y no se aplican cambios.
Fuente de la imagen: https://www.sqlite.org/images/syntax/alter-table-stmt.gif
Ejemplo:
CREATE TABLE tab AS SELECT 1 AS c;
SELECT * FROM tab;
ALTER TABLE tab RENAME COLUMN c to c_new;
SELECT * FROM tab;
Demostración de db-fiddle.com
Soporte de Android
Al momento de escribir, La API 27 de Android utiliza la versión 3.19 del paquete SQLite.
Basado en la versión actual que está usando Android y que esta actualización viene en la versión 3.25.0 de SQLite, diría que tiene que esperar un poco (aproximadamente API 33) antes de que se agregue soporte para esto a Android.
E incluso entonces, si necesita admitir versiones anteriores a la API 33, no podrá usar esto.
Investigando, encontré esta herramienta gráfica multiplataforma (Linux | Mac | Windows) llamada DB Browser para SQLite que realmente permite cambiar el nombre de las columnas de una manera muy fácil de usar.
Editar | Modificar tabla | Seleccionar tabla | Editar campo. ¡Clic clic! ¡Voila!
Sin embargo, si alguien quiere compartir una forma programática de hacer esto, ¡me complacerá saberlo!