Contenido de esta guía
Qué elimina DROP COLUMN
ALTER TABLE ... DROP COLUMN retira la definición de una columna y sus valores de la tabla. No es equivalente a poner todos los valores a NULL: después del cambio, la columna deja de existir.
La operación puede exigir reescribir la tabla, adquirir bloqueos o rechazar el cambio si la columna participa en claves, índices, restricciones, vistas, columnas generadas o disparadores.
Comprobaciones previas
- Busca lecturas y escrituras del nombre de la columna en aplicaciones, consultas e informes.
- Revisa claves, índices, restricciones, vistas y disparadores.
- Decide si los datos deben archivarse antes de eliminarlos.
- Mide el tamaño de la tabla y el posible bloqueo.
- Prepara una copia de seguridad y un plan de reversión.
Sintaxis y ejemplo
CREATE TABLE productos_demo (
id INTEGER PRIMARY KEY,
nombre TEXT NOT NULL,
nota_interna TEXT
);
INSERT INTO productos_demo (id, nombre, nota_interna)
VALUES (1, 'Ratón', 'revisar embalaje');
ALTER TABLE productos_demo
DROP COLUMN nota_interna;
SELECT *
FROM productos_demo;| id | nombre |
|---|---|
| 1 | Ratón |
El valor «revisar embalaje» desaparece junto con la columna. Para recuperarlo, necesitarías una copia o una migración inversa que conserve esos datos en otro lugar.
Qué ocurre con las dependencias
PostgreSQL distingue entre RESTRICT, que rechaza el cambio si existen objetos dependientes, y CASCADE, que también elimina dependencias. Utilizar CASCADE sin revisar qué desaparecerá puede ampliar mucho el alcance de la operación.
SQLite rechaza DROP COLUMN cuando la columna forma parte de una clave primaria, tiene una restricción UNIQUE, está indexada o aparece en varias clases de objetos del esquema. MySQL y SQL Server también tienen reglas y costes propios.
Errores frecuentes
Eliminar antes de dejar de usar
Una estrategia más segura es separar el cambio en etapas: dejar de escribir la columna, migrar o archivar los datos, desplegar aplicaciones que ya no la lean y eliminarla en una versión posterior.
No uses SELECT * en aplicaciones que dependen del orden de columnas. Un cambio de esquema puede alterar la forma del resultado incluso cuando el código no menciona la columna eliminada.
Comprueba lo aprendido
Retira una columna temporal
La tabla clientes_demo contiene codigo_importacion, que ya no utiliza ninguna aplicación. Escribe la sentencia de eliminación y una consulta para comprobar las columnas restantes.
ALTER TABLE clientes_demo.DROP COLUMN codigo_importacion.Solución razonada
ALTER TABLE clientes_demo
DROP COLUMN codigo_importacion;
SELECT id, nombre, email
FROM clientes_demo;La consulta de comprobación nombra las columnas esperadas de forma explícita. En una migración real, acompaña este cambio con pruebas de dependencias y respaldo.
Compatibilidad entre motores
PostgreSQL, MySQL, SQL Server y SQLite actual admiten eliminar columnas, pero no comparten todas las opciones ni el mismo tratamiento de dependencias. SQLite incorporó DROP COLUMN en versiones modernas y lo rechaza si quedan referencias incompatibles en el esquema. En tablas grandes, investiga además si el motor realiza una operación instantánea, en línea o una reescritura costosa.
Qué debes recordar
- La eliminación borra datos y cambia el contrato del esquema.
- Localiza dependencias antes de ejecutar.
- Prefiere una retirada por etapas en producción.
- No uses opciones en cascada sin inspeccionar su alcance.