El comando ALTER TABLE en SQL se utiliza para modificar la estructura de una tabla existente. A diferencia de comandos como INSERT o UPDATE, que trabajan con los datos, ALTER TABLE se centra en la definición de la tabla: sus columnas, restricciones, índices y, en algunos sistemas, hasta su nombre.
Es una de las sentencias más poderosas del lenguaje SQL porque permite evolucionar un esquema de base de datos sin tener que eliminar y recrear tablas desde cero. Saber usarla de manera correcta es fundamental para administradores de bases de datos (DBA), desarrolladores backend y analistas de datos que gestionan sistemas en producción.
¿Qué permite hacer ALTER TABLE?
Con ALTER TABLE se pueden realizar varias operaciones, entre ellas:
- Agregar columnas nuevas.
- Modificar el tipo de dato o características de columnas existentes.
- Renombrar columnas (según el SGBD).
- Eliminar columnas.
- Agregar restricciones (
PRIMARY KEY,FOREIGN KEY,CHECK,UNIQUE). - Eliminar restricciones.
- Agregar o eliminar índices (dependiendo del motor de base de datos).
- Cambiar el nombre de la tabla.
Sintaxis básica

La forma general es:
ALTER TABLE nombre_tabla acción;
Donde acción puede ser ADD, DROP, ALTER, RENAME, etc., dependiendo de lo que quieras hacer.
Ejemplos prácticos de ALTER TABLE
1. Agregar una columna
ALTER TABLE empleados
ADD COLUMN fecha_ingreso DATE;
👉 Esto añade una nueva columna llamada fecha_ingreso a la tabla empleados.
2. Modificar el tipo de dato de una columna
ALTER TABLE productos
ALTER COLUMN precio TYPE DECIMAL(10,2);
👉 Cambia el tipo de dato de la columna precio para aceptar números decimales con precisión de 10 y 2 decimales.
(En SQL Server se usa ALTER COLUMN, en MySQL MODIFY COLUMN.)
3. Renombrar una columna
ALTER TABLE clientes
RENAME COLUMN nombre TO nombre_completo;
👉 Cambia el nombre de la columna nombre a nombre_completo.
4. Eliminar una columna
ALTER TABLE pedidos
DROP COLUMN observaciones;
👉 Quita por completo la columna observaciones de la tabla pedidos.
5. Agregar una clave foránea
ALTER TABLE pedidos
ADD CONSTRAINT fk_cliente
FOREIGN KEY (cliente_id) REFERENCES clientes(id);
👉 Define que la columna cliente_id de pedidos esté vinculada a la tabla clientes.
6. Eliminar una restricción
ALTER TABLE pedidos
DROP CONSTRAINT fk_cliente;
👉 Elimina la clave foránea llamada fk_cliente.
7. Renombrar la tabla
ALTER TABLE empleados
RENAME TO trabajadores;
👉 Cambia el nombre de la tabla empleados por trabajadores.
Diferencias según el motor de base de datos
Aunque ALTER TABLE forma parte del estándar SQL, cada motor puede tener pequeñas variaciones:
- MySQL / MariaDB: usa
MODIFY COLUMNpara cambiar tipo de datos. - PostgreSQL: requiere
ALTER COLUMNy soporta muchas opciones avanzadas (default, not null, etc.). - SQL Server: no permite renombrar columnas con
ALTER TABLE; se usasp_rename. - Oracle: tiene soporte similar a PostgreSQL, pero con diferencias en los tipos de datos.
👉 Siempre revisá la documentación de tu motor antes de aplicar cambios en producción.
¿Cuándo usar ALTER TABLE?
Algunos casos típicos:
- La aplicación necesita un nuevo campo (ejemplo: fecha de nacimiento en usuarios).
- Es necesario ajustar la longitud de una columna de texto (ejemplo: de
VARCHAR(50)aVARCHAR(100)). - Se debe corregir un error de diseño (ejemplo: una columna que debería ser
NOT NULL). - Hay que optimizar la tabla agregando índices o restricciones.
- Se quiere refactorizar nombres de tablas o columnas para mejorar la consistencia.
Buenas prácticas al usar ALTER TABLE
- Probar en un entorno de desarrollo antes de aplicarlo en producción.
- Respaldar la base de datos o al menos la tabla afectada.
- Evitar usar
ALTER TABLEen horarios de alto tráfico, ya que puede bloquear la tabla mientras se ejecuta. - Documentar cada cambio estructural (muchas empresas llevan un changelog SQL).
- Evitar eliminar columnas sin un análisis previo: la pérdida de datos es irreversible.
- Nombrar restricciones de forma explícita (
fk_clientes_pedidos) en lugar de dejar que el motor ponga nombres automáticos.
Errores comunes con ALTER TABLE
- Olvidar que algunos cambios son irreversibles: eliminar una columna borra todos los datos de forma permanente.
- Problemas de compatibilidad: ciertos tipos de cambios (ej. reducir la longitud de una columna) pueden fallar si existen datos que no cumplen con la nueva definición.
- Confundir sintaxis entre SGBD: en MySQL se usa
MODIFY, en PostgreSQLALTER COLUMN. - Renombrar tablas sin actualizar código: si la aplicación espera la tabla
usuariosy la renombrás aclientes, todo puede romperse.
Ejemplo avanzado: evolución de una tabla de pedidos
Imaginemos que tenemos esta tabla inicial:
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT,
total DECIMAL(10,2)
);
Con el tiempo, necesitamos:
- Guardar la fecha del pedido.
- Relacionar con la tabla
clientes. - Asegurar que
totalnunca sea negativo.
Podemos lograrlo así:
ALTER TABLE pedidos
ADD COLUMN fecha DATE;
ALTER TABLE pedidos
ADD CONSTRAINT fk_cliente FOREIGN KEY (cliente_id) REFERENCES clientes(id);
ALTER TABLE pedidos
ADD CONSTRAINT chk_total CHECK (total >= 0);
Resultado: la tabla ahora está preparada para ser más confiable y útil en el sistema.
Preguntas frecuentes (FAQ)
1. ¿ALTER TABLE borra mis datos?
No necesariamente. Solo cuando eliminás columnas o tablas completas. Cambiar tipos de datos o agregar columnas no elimina información existente (salvo errores).
2. ¿Puedo deshacer un ALTER TABLE?
No directamente. La única forma es restaurar un backup o ejecutar otro ALTER TABLE inverso (ej.: volver a agregar una columna).
3. ¿Es pesado usar ALTER TABLE en tablas grandes?
Sí. En bases de datos con millones de filas, operaciones como cambiar tipo de columna pueden tardar bastante y bloquear la tabla.
4. ¿Cuál es la diferencia entre ALTER TABLE y CREATE TABLE?
CREATE TABLE: crea una tabla desde cero.ALTER TABLE: modifica una tabla ya existente.
5. ¿Puedo usar ALTER TABLE para cambiar el orden de las columnas?
En la mayoría de los motores no importa el orden de las columnas, pero en MySQL sí existe la opción AFTER. En otros, no se garantiza.
Conclusión
El comando ALTER TABLE es una herramienta esencial en la administración y mantenimiento de bases de datos SQL. Permite adaptar las estructuras a nuevas necesidades sin tener que borrar y recrear tablas. Sin embargo, también puede ser peligroso si se utiliza sin precaución, ya que ciertos cambios implican pérdida de datos o bloqueos prolongados en tablas grandes.
Dominar este comando te ayudará a ser más ágil y seguro al gestionar cambios en proyectos reales, evitando errores comunes y aplicando buenas prácticas.
Profundiza en creación y cambios de tablas en CREATE / ALTER TABLE y repasa términos relacionados en el Glosario SQL completo.
📚 Artículos relacionados
- Cómo modificar la estructura de una tabla en SQL con ALTER TABLE paso a paso
Guía completa para principiantes donde aprenderás a usar ALTER TABLE para agregar, eliminar o modificar columnas y restricciones de manera segura. - Diferencia entre ALTER TABLE ADD COLUMN y ALTER TABLE MODIFY COLUMN en SQL
Explicación clara y práctica sobre las diferencias entre agregar nuevas columnas y modificar columnas existentes, con ejemplos en distintos motores de bases de datos. - Cómo usar ALTER TABLE DROP COLUMN en SQL con ejemplos prácticos
Ejemplos detallados que muestran cómo eliminar columnas de una tabla, sus efectos en los datos existentes y las buenas prácticas para evitar errores. - Renombrar columnas y tablas en SQL con ALTER TABLE RENAME
Paso a paso para cambiar nombres de tablas y columnas, incluyendo compatibilidad entre MySQL, PostgreSQL, SQL Server y Oracle. - Impacto en el rendimiento al usar ALTER TABLE en tablas grandes
Explicación del impacto en el rendimiento de ALTER TABLE cuando se aplica en tablas con millones de registros, y estrategias para minimizar demoras. - ALTER TABLE en SQL con restricciones PRIMARY KEY y FOREIGN KEY explicados
Guía práctica para agregar o eliminar claves primarias y foráneas con ALTER TABLE, con ejemplos de integridad referencial y buenas prácticas de diseño.
