Aprende SQL

Modificando estructuras: ALTER TABLE

Lección 03 · Estructura de tablas

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.

Diagrama: esquema videogames antes (id, title, year) → ALTER TABLE → después (mismas columnas más rating REAL marcada “+ NEW”).

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 cambiar el tipo de una columna existente.
  • No permite añadir restricciones como NOT NULL a columnas existentes (sin DEFAULT).

Eliminar columnas sí es posible en versiones modernas, como verás en la siguiente sección.

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:

  1. Haz un respaldo de la base de datos antes de cualquier cambio estructural.
  2. 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

Nombre de la Tabla: videogames

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

Tablas de esta lección

videogames5 cols

Estructura

🔑idINTEGERtitleTEXTdeveloperTEXTyearINTEGERplaytime_hoursINTEGER

Datos de ejemplo (5 filas)

idtitledeveloperyearplaytime_hours
1The Legend of ZeldaNintendo198620
2Super Mario Bros.Nintendo198510
3Final Fantasy VIISquare Enix199740
4The Witcher 3CD Projekt Red2015100
5MinecraftMojang Studios20119999
6Grand Theft Auto VRockstar Games201380
7Dark SoulsFromSoftware201160
8Portal 2Valve20118
9Red Dead Redemption 2Rockstar Games201870
10The Last of UsNaughty Dog201315
11Halo: Combat EvolvedBungie200110
12God of WarSanta Monica Studio201825

Ejercicios

Añade una nueva columna 'rating' de tipo REAL a la tabla videogames.

sql

Renombra la columna 'playtime_hours' a 'hours' en la tabla videogames.

sql

Renombra la tabla 'videogames' a 'games'.

sql