Contenido de esta guía
Qué puede cambiar ALTER TABLE
ALTER TABLE actúa sobre una tabla que ya existe. Según el motor, permite añadir o eliminar columnas, renombrar objetos, cambiar tipos y valores predeterminados, o gestionar restricciones.
No existe una única lista de operaciones idéntica en todos los motores. La palabra inicial es común, pero la sintaxis, los bloqueos y la forma de reescribir datos pueden cambiar de manera importante.
Patrones habituales
ALTER TABLE clientes ADD COLUMN telefono VARCHAR(30);
ALTER TABLE clientes RENAME COLUMN telefono TO movil;
ALTER TABLE clientes DROP COLUMN movil;No ejecutes una lista como esta de forma ciega. Comprueba una operación cada vez en la documentación y versión de tu base de datos.
Ejemplo guiado: añadir una columna
CREATE TABLE clientes_demo (
id INTEGER PRIMARY KEY,
nombre TEXT NOT NULL
);
INSERT INTO clientes_demo (id, nombre)
VALUES (1, 'Ana'), (2, 'Luis');
ALTER TABLE clientes_demo
ADD COLUMN activo INTEGER NOT NULL DEFAULT 1;
SELECT id, nombre, activo
FROM clientes_demo
ORDER BY id;| id | nombre | activo |
|---|---|---|
| 1 | Ana | 1 |
| 2 | Luis | 1 |
La columna nueva tiene un valor predeterminado válido para las filas existentes. Las reglas exactas para columnas obligatorias dependen del motor y de la operación.
Un cambio breve en SQL no siempre es barato. En tablas grandes, ciertas modificaciones pueden leer o reescribir muchos datos, crear bloqueos o necesitar espacio adicional. Evalúa el plan y prueba con una copia representativa.
Secuencia de trabajo segura
- confirma la sintaxis de la versión real;
- revisa vistas, índices, restricciones y aplicaciones dependientes;
- crea una copia de seguridad y ensaya la recuperación;
- prueba el cambio con datos representativos;
- define cómo revertirlo si la validación falla;
- comprueba datos y consultas después de aplicarlo.
Error frecuente
Copiar una variante de otro motor
Expresiones como ALTER COLUMN, MODIFY COLUMN o determinadas formas de ADD CONSTRAINT no son intercambiables. SQLite, por ejemplo, ofrece un conjunto directo más limitado que otros motores y para algunos cambios exige reconstruir la tabla.
Tampoco asumas que una operación DDL puede revertirse de la misma forma en todos los sistemas.
Comprueba lo aprendido
Añade un dato opcional
La tabla proveedores ya contiene id y nombre. Añade una columna telefono que acepte hasta 30 caracteres y pueda quedar vacía.
ALTER TABLE proveedores.ADD COLUMN.NOT NULL si el dato es opcional.Solución razonada
ALTER TABLE proveedores
ADD COLUMN telefono VARCHAR(30);La columna admite NULL porque no se ha declarado NOT NULL. Verifica que esta sintaxis sea válida en tu motor.
Compatibilidad entre motores
PostgreSQL, MySQL, SQL Server y Oracle disponen de familias amplias de operaciones, con sintaxis y efectos propios. SQLite admite renombrar tablas y columnas, añadir y eliminar columnas y, desde SQLite 3.53.0, también añadir o quitar restricciones NOT NULL y CHECK mediante ALTER TABLE ... ALTER COLUMN. Sigue sin ofrecer todas las transformaciones de otros motores; para cambios no soportados, su documentación recomienda crear una tabla nueva, copiar los datos y sustituir la anterior.
Qué debes recordar
ALTER TABLEcambia un esquema que ya puede contener datos.- La sintaxis concreta depende del motor y de la versión.
- Un cambio pequeño puede ser costoso o bloquear operaciones.
- Prueba, respalda y prepara una reversión antes de producción.
Antes de ampliar un VARCHAR para resolver un error, confirma qué valor excede el límite y si el cambio de esquema es realmente correcto: cómo diagnosticar un valor demasiado largo para VARCHAR.