Contenido de esta guía
La diferencia esencial
ADD COLUMN crea un atributo que no existía. MODIFY COLUMN o ALTER COLUMN cambia la definición de una columna existente: tipo, longitud, nulabilidad, valor predeterminado u otras propiedades permitidas.
La segunda familia no tiene una sintaxis universal. MODIFY COLUMN es propia de MySQL y otros dialectos; PostgreSQL y SQL Server utilizan variantes de ALTER COLUMN.
Cómo elegir
| Pregunta | Operación | Ejemplo |
|---|---|---|
| ¿La columna no existe? | ADD COLUMN | Añadir peso_kg |
| ¿Existe y cambia el tipo? | ALTER/MODIFY COLUMN | precio pasa a mayor precisión |
| ¿Solo cambia el nombre? | Renombrado específico | telefono pasa a movil |
| ¿Quieres cambiar valores? | UPDATE | Completar teléfonos vacíos |
Ejemplo 1: añadir una columna
ALTER TABLE productos
ADD COLUMN peso_kg DECIMAL(6,2);La tabla obtiene una nueva columna. Las filas anteriores tendrán NULL cuando no se haya declarado un valor predeterminado compatible. Añadir la columna no convierte ni reemplaza otra.
peso_kg| Filas de productos | Filas con peso_kg IS NULL | Columnas anteriores |
|---|---|---|
| 9 | 9 | Sin cambios |
El resultado confirma que ADD COLUMN amplía el esquema sin inventar datos. Si necesitas que la columna sea obligatoria, primero rellena valores válidos y después aplica la restricción con la sintaxis de tu motor.
Ejemplo 2: cambiar una columna existente
ALTER TABLE productos
ALTER COLUMN precio TYPE NUMERIC(12,2);ALTER TABLE productos
MODIFY COLUMN precio DECIMAL(12,2) NOT NULL;ALTER TABLE productos
ALTER COLUMN precio DECIMAL(12,2) NOT NULL;Las tres sentencias expresan una intención parecida, pero no son intercambiables. En MySQL, la definición escrita en MODIFY COLUMN debe conservar propiedades que quieras mantener, como NOT NULL. PostgreSQL puede necesitar una cláusula USING si los valores no tienen una conversión implícita adecuada.
Qué ocurre en SQLite
SQLite admite directamente ADD COLUMN, renombrados y DROP COLUMN. Desde SQLite 3.53.0, publicada el 9 de abril de 2026, también admite ALTER TABLE ... ALTER COLUMN ... SET/DROP NOT NULL. Sigue sin existir una orden genérica para cambiar arbitrariamente el tipo y todas las propiedades de una columna. El laboratorio del sitio comprueba ADD COLUMN; para transformaciones no admitidas, aplica el procedimiento documentado de crear una tabla nueva, copiar los datos, validar y sustituir la anterior.
Errores frecuentes
Tratar MODIFY como si solo indicara el fragmento que cambia
En MySQL, escribir de nuevo la definición puede modificar accidentalmente nulabilidad u otras propiedades si se omiten. Revisa la definición actual antes de ejecutar la sentencia.
Otro error es cambiar a un tipo más estrecho sin comprobar datos. La operación puede fallar, truncar según la configuración o necesitar una copia costosa de la tabla.
Comprueba lo aprendido
Distingue creación de redefinición
Debes A) incorporar descripcion, que no existe, y B) ampliar nombre, que ya existe. Escribe una solución para MySQL y explica qué comprobarías después de cada cambio.
MODIFY COLUMN.Solución razonada
ALTER TABLE productos
ADD COLUMN descripcion VARCHAR(500);
ALTER TABLE productos
MODIFY COLUMN nombre VARCHAR(200) NOT NULL;Después del primer cambio, comprueba que la columna existe y que las nueve filas anteriores tienen NULL. Después del segundo, revisa la definición de nombre y ejecuta una consulta que confirme que no se ha truncado ningún valor. La segunda sentencia no es portable: PostgreSQL y SQL Server utilizan variantes de ALTER COLUMN.
Antes de cambiar un tipo
- Busca el valor mínimo, máximo y los formatos existentes.
- Comprueba valores que no se pueden convertir.
- Revisa índices, claves, vistas y código dependiente.
- Estima si el motor copiará o reescribirá la tabla.
- Prueba la migración y su reversión con una copia representativa.
Compatibilidad entre motores
La adición de columnas está disponible en los motores principales, aunque cambian restricciones y valores predeterminados permitidos. Para modificar definiciones, PostgreSQL usa ALTER COLUMN con subórdenes como TYPE; MySQL utiliza MODIFY COLUMN o CHANGE COLUMN; SQL Server usa ALTER COLUMN. SQLite mantiene un conjunto más limitado para cambios directos. No publiques una sentencia genérica sin indicar el dialecto.
Qué debes recordar
ADD COLUMNcrea;ALTER/MODIFY COLUMNredefine.- Modificar datos corresponde a
UPDATE, no aALTER TABLE. - La sintaxis de modificación cambia mucho entre motores.
- Revisa datos y coste antes de cambiar tipos o nulabilidad.