En SQL no basta con crear tablas: con el tiempo, los requerimientos cambian y es necesario adaptar la estructura. Quizás tengas que agregar una nueva columna para guardar un dato adicional o modificar una existente porque el tipo de dato ya no es suficiente.
En estos casos entran en juego dos instrucciones clave:
ALTER TABLE ... ADD COLUMNALTER TABLE ... MODIFY COLUMN
A primera vista parecen similares, pero cumplen propósitos diferentes y, además, la sintaxis varía según el motor de base de datos. En este artículo vas a aprender, desde cero, la diferencia entre ambas, con ejemplos detallados, notas de compatibilidad y recomendaciones de uso seguro en producción.
1) Recordatorio: ¿qué es ALTER TABLE?
El comando ALTER TABLE permite modificar la definición de una tabla existente sin tener que eliminarla ni volver a crearla. Con él se pueden realizar muchas operaciones, como:
- Agregar o eliminar columnas.
- Cambiar tipos de datos, longitudes o restricciones (
NOT NULL,DEFAULT). - Renombrar columnas o tablas.
- Añadir o quitar claves primarias, foráneas, índices o reglas
CHECK.
En resumen: ALTER TABLE es el «cuchillo suizo» de la evolución de esquemas en SQL.
2) ALTER TABLE ADD COLUMN: para agregar campos nuevos
2.1 Sintaxis general
ALTER TABLE nombre_tabla
ADD COLUMN nombre_columna tipo_de_dato [restricciones];
2.2 Ejemplo práctico
Supongamos que tenemos una tabla de clientes:
CREATE TABLE clientes (
id INT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(255),
fecha_alta DATE
);
Ahora queremos agregar el número de teléfono. Usamos:
ALTER TABLE clientes
ADD COLUMN telefono VARCHAR(30);
Resultado:
La tabla mantiene sus columnas originales y ahora incluye telefono.
| id | nombre | fecha_alta | telefono | |
|---|---|---|---|---|
| 1 | Ana | ana@mail.com | 2024-01-01 | NULL |
| 2 | Bruno | bruno@mail.com | 2024-01-02 | NULL |
2.3 Agregar múltiples columnas a la vez
ALTER TABLE clientes
ADD COLUMN pais VARCHAR(50),
ADD COLUMN ciudad VARCHAR(80);
2.4 Puntos importantes
- Si la tabla ya tiene datos, las filas existentes reciben
NULLen las nuevas columnas (a menos que se especifique unDEFAULT). - La sintaxis
ADD COLUMNes bastante estándar, pero algunos motores (como SQL Server) permiten omitir la palabraCOLUMN. - En bases de datos muy grandes, agregar una columna
NOT NULLconDEFAULTpuede bloquear o reescribir la tabla.
3) ALTER TABLE MODIFY COLUMN: para cambiar columnas existentes
3.1 ¿Qué hace?
Mientras que ADD COLUMN crea un campo nuevo, MODIFY COLUMN (o su equivalente según el motor) ajusta las características de una columna que ya existe.
Con él podés:
- Cambiar el tipo de dato.
- Alterar la longitud máxima de un
VARCHAR. - Añadir o quitar restricciones como
NOT NULL. - Redefinir el valor por defecto (
DEFAULT).
3.2 Sintaxis típica (MySQL/MariaDB)
ALTER TABLE nombre_tabla
MODIFY COLUMN nombre_columna nuevo_tipo [restricciones];
3.3 Ejemplo práctico
Si en la tabla clientes queremos que el campo telefono admita más caracteres:
ALTER TABLE clientes
MODIFY COLUMN telefono VARCHAR(50);
Ahora telefono pasa de VARCHAR(30) a VARCHAR(50).
3.4 Otros motores
Cada motor de base de datos maneja su propia sintaxis:
- PostgreSQL usa
ALTER COLUMN ... TYPE:ALTER TABLE clientes ALTER COLUMN telefono TYPE VARCHAR(50); - SQL Server también usa
ALTER COLUMN:ALTER TABLE clientes ALTER COLUMN telefono VARCHAR(50); - Oracle utiliza
MODIFY:ALTER TABLE clientes MODIFY (telefono VARCHAR2(50));
4) Comparación directa: ADD COLUMN vs MODIFY COLUMN
| Característica | ADD COLUMN | MODIFY COLUMN |
|---|---|---|
| Objetivo | Crear una nueva columna. | Cambiar una columna existente. |
| Ejemplo | ADD COLUMN telefono VARCHAR(30); | MODIFY COLUMN telefono VARCHAR(50); |
| Datos existentes | No se tocan, solo reciben NULL o el DEFAULT. | Deben ser compatibles con el nuevo tipo/restricción. |
| Errores comunes | Intentar agregar una columna ya existente. | Cambiar tipo sin conversión válida; forzar NOT NULL con valores nulos. |
| Compatibilidad | Estándar en casi todos los motores. | Varía mucho: MODIFY, ALTER COLUMN, etc. |
5) Casos en los que usar ADD COLUMN
- Cuando tenés que guardar un nuevo dato que antes no existía.
- Ejemplo: tu aplicación ahora requiere almacenar el número de documento de los clientes:
ALTER TABLE clientes
ADD COLUMN dni VARCHAR(20) NOT NULL;
- Otro ejemplo: registrar la fecha de última actualización:
ALTER TABLE clientes
ADD COLUMN ultima_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
6) Casos en los que usar MODIFY COLUMN
- Cuando querés ajustar un campo existente para que soporte datos diferentes.
- Ejemplo: un
VARCHAR(100)que necesita crecer aVARCHAR(200). - O un campo opcional (
NULL) que ahora debe ser obligatorio:
ALTER TABLE clientes
MODIFY COLUMN email VARCHAR(255) NOT NULL;
- Otro uso común: actualizar un DEFAULT:
ALTER TABLE clientes
MODIFY COLUMN pais VARCHAR(50) DEFAULT 'Argentina';
7) Riesgos y buenas prácticas
7.1 Con ADD COLUMN
- En tablas grandes, evita agregar columnas con
NOT NULLyDEFAULTen una sola operación. - Estrategia segura: agregar la columna como nullable, rellenar los valores (
UPDATEen batches) y después aplicarNOT NULL.
7.2 Con MODIFY COLUMN
- Cuidado al reducir tamaños (
VARCHAR(200)→VARCHAR(50)): se pueden truncar datos. - Antes de aplicar
NOT NULL, asegurate de que no haya valores nulos. - Al cambiar tipos (ej.
TEXTaINT), verificá la conversión.
7.3 Compatibilidad entre motores
ADD COLUMNsuele ser igual en casi todos.MODIFY COLUMNcambia de nombre según el motor (ALTER COLUMNen PostgreSQL/SQL Server,MODIFYen Oracle).
8) Ejemplo completo: evolución de una tabla
Escenario: tabla de pedidos.
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT NOT NULL,
total NUMERIC(12,2) NOT NULL,
fecha DATE NOT NULL
);
Paso 1: Agregar columna de estado (ADD COLUMN)
ALTER TABLE pedidos
ADD COLUMN estado VARCHAR(20) DEFAULT 'pendiente';
Ahora cada pedido tiene un estado.
| id | cliente_id | total | fecha | estado |
|---|---|---|---|---|
| 1 | 10 | 250.00 | 2024-01-05 | pendiente |
Paso 2: Ajustar tipo de columna total (MODIFY COLUMN)
Necesitamos que total permita más precisión:
- En PostgreSQL:
ALTER TABLE pedidos ALTER COLUMN total TYPE NUMERIC(14,4); - En MySQL/MariaDB:
ALTER TABLE pedidos MODIFY COLUMN total DECIMAL(14,4); - En Oracle:
ALTER TABLE pedidos MODIFY (total NUMBER(14,4));
Resultado: ahora se admiten montos más grandes y con más decimales.
9) Ejemplo de error típico
Caso: intentar usar ADD COLUMN para algo que corresponde a MODIFY COLUMN.
ALTER TABLE clientes
ADD COLUMN email VARCHAR(300); -- ❌ Error: email ya existe
Solución:
ALTER TABLE clientes
MODIFY COLUMN email VARCHAR(300); -- ✅ correcto
10) Checklist antes de aplicar cambios
- ¿Realmente necesitás una nueva columna o solo cambiar una existente?
- ¿Probaste en un entorno de desarrollo?
- ¿Los datos actuales son compatibles con el nuevo tipo o restricción?
- ¿Tenés respaldo/rollback en caso de fallo?
- ¿Verificaste dependencias (índices, claves foráneas, vistas)?
11) Cierre
La diferencia entre ADD COLUMN y MODIFY COLUMN es clara:
- ADD COLUMN → crear un campo nuevo.
- MODIFY COLUMN → ajustar un campo existente.
Usar uno u otro depende de tu objetivo. Ambos son parte del comando ALTER TABLE, pero mientras ADD COLUMN es bastante estándar, MODIFY COLUMN cambia mucho entre motores y requiere cuidado extra.
Si aplicás estas prácticas, tus cambios de esquema serán más seguros, consistentes y portables.
📚 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. - 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.
