Modificando estructuras: ALTER TABLE
ALTER TABLE te permite cambiar la estructura de una tabla existente sin perder los datos. Es útil cuando necesitas evolucionar tu esquema.
ALTER TABLE → Añadir una columna
ALTER TABLE videogames
ADD COLUMN rating REAL;La nueva columna tendrá valor NULL en todas las filas existentes, a menos que especifiques un DEFAULT.
Renombrar una columna
ALTER TABLE videogames
RENAME COLUMN playtime_hours TO hours;Renombrar la tabla
ALTER TABLE videogames
RENAME TO games;Limitaciones en SQLite
SQLite tiene algunas limitaciones con ALTER TABLE:
- No permite eliminar columnas directamente (en versiones antiguas).
- No permite cambiar el tipo de una columna existente.
- No permite añadir restricciones como
NOT NULLa columnas existentes (sinDEFAULT).
Eliminar columnas: DROP COLUMN
A partir de SQLite 3.35 (2021), es posible eliminar columnas directamente:
ALTER TABLE videogames
DROP COLUMN playtime_hours;Antes de esta versión, eliminar una columna requería recrear la tabla completa. Si trabajas con una versión moderna de SQLite, DROP COLUMN es la forma más sencilla.
Ten en cuenta que no puedes eliminar una columna si es PRIMARY KEY, forma parte de un índice, o es la única columna de la tabla.
Patrón de migración seguro
Cuando modificas la estructura de tablas en producción, sigue estos pasos para evitar pérdida de datos:
- Haz un respaldo de la base de datos antes de cualquier cambio estructural.
- Usa transacciones para poder revertir si algo sale mal:
BEGIN TRANSACTION;
ALTER TABLE videogames ADD COLUMN rating REAL DEFAULT 0;
-- Si todo va bien:
COMMIT;
-- Si algo falla:
-- ROLLBACK;Las transacciones te dan una red de seguridad: si algo falla durante la modificación, puedes ejecutar ROLLBACK para dejar la base de datos exactamente como estaba antes.
Nuestra tabla actual
| id | title | developer | year | playtime_hours |
|---|---|---|---|---|
| 1 | The Legend of Zelda | Nintendo | 1986 | 20 |
| 2 | Super Mario Bros. | Nintendo | 1985 | 10 |
| 3 | Final Fantasy VII | Square Enix | 1997 | 40 |
| … | … | … | … | … |
| 12 | God of War | Santa Monica Studio | 2018 | 25 |