Modificar tablas en MySQL es una tarea cotidiana cuando trabajas con bases de datos vivas. El comando ALTER TABLE te permite agregar, eliminar, renombrar y reformatear columnas sin reconstruir la estructura desde cero, algo clave cuando un cliente cambia los requisitos o detectas que olvidaste un detalle.
Las tablas no están escritas sobre piedra, y eso es justamente lo que hace tan poderoso este comando. Aquí verás cómo aplicarlo paso a paso sobre una tabla de prueba llamada test, con ejemplos reales de cada subcomando.
¿Cómo agregar una columna nueva con ALTER TABLE?
Para sumar una columna a una tabla existente, usas el subcomando ADD COLUMN indicando el nombre y el tipo de dato.
sql
ALTER TABLE test ADD COLUMN price FLOAT;
Después de ejecutarlo, un DESC test te confirma que la columna price quedó registrada como float y permite valores nulos por defecto.
¿Qué hace ALTER TABLE en MySQL? Es el comando que modifica la estructura de una tabla ya creada. Te permite agregar columnas, borrarlas, cambiar tipos de dato o renombrar la tabla completa sin perder los datos existentes.
¿Puedo elegir la posición de la columna nueva?
Sí. Al final de la definición puedes usar FIRST para colocarla al inicio o AFTER nombre_columna para ubicarla después de una columna específica.
sql
ALTER TABLE test ADD COLUMN price FLOAT AFTER quantity;
El orden de las columnas no impacta el rendimiento de las consultas ni de la tabla. Es, en gran medida, vanidad o comodidad visual. Lo importante es que entiendas qué guarda cada tabla, no si están en orden alfabético.
¿Cómo elimino una columna en MySQL?
Para borrar una columna usas DROP COLUMN seguido del nombre. No necesitas especificar nada más.
sql
ALTER TABLE test DROP COLUMN price;
Después de ejecutar el comando, la columna desaparece por completo junto con cualquier dato que tuviera. Por eso conviene hacerlo con cuidado en bases de producción.
¿Cómo modificar el tipo de dato de una columna existente?
Cuando necesitas cambiar el tipo de dato o las restricciones, el subcomando es MODIFY COLUMN. Aquí entra en juego un tipo de dato muy útil para precisión numérica: decimal.
sql
ALTER TABLE test MODIFY COLUMN price DECIMAL(10,3) NOT NULL;
En decimal(10,3), el primer número es la longitud total de dígitos y el segundo indica cuántos van después del punto decimal. Eso te permite guardar valores como 1234567.123. Es crítico en fintech, donde la regulación exige operar con una cantidad exacta de decimales y un float común no es suficiente.
¿Qué diferencia hay entre FLOAT y DECIMAL en MySQL? Float maneja punto flotante con precisión aproximada. Decimal almacena valores con precisión exacta, ideal para dinero y datos regulados donde un centavo perdido importa.
¿Qué cuidados debo tener al modificar columnas con datos?
La mayoría de las veces que ejecutes un MODIFY COLUMN, la tabla ya tendrá registros. Hay que asegurarse de que el nuevo tipo de dato sea compatible con el anterior.
- Si pasas un string como
"hola" a un tipo numérico, MySQL te marcará error porque no puede convertirlo.
- Una alternativa segura es crear una columna nueva, mover los datos con
UPDATE y después borrar la original.
- En producción, este tipo de cambios se hacen con peer review: pídele a alguien del equipo que revise tu modificación antes de ejecutarla.
No es buena práctica modificar columnas con frecuencia en bases de datos productivas. Sí sucede, pero las menos veces y siempre con sumo cuidado.
¿Existen sinónimos del tipo DECIMAL?
MySQL maneja aliases para varios tipos de datos. DECIMAL(M,P) tiene tres sinónimos exactos: NUMERIC, DEC y FIXED. Los cuatro hacen lo mismo, donde M es la longitud total del espacio numérico y P son los dígitos después del punto decimal.
Los valores por defecto dependen de la versión, pero típicamente M ronda los 10 o 20 y P los 7 o 10. Cada versión tiene su propia documentación.
¿Cómo renombrar una columna o una tabla completa?
Para cambiar el nombre de una columna sin tocar su tipo de dato, usas RENAME COLUMN.
sql
ALTER TABLE test RENAME COLUMN price TO prices;
Y si quieres renombrar la tabla entera, el subcomando es RENAME TO.
sql
ALTER TABLE test RENAME TO tests;
SQL es un lenguaje bastante natural, así que muchas veces puedes inferir el comando por su nombre.
¿Cómo agrego un valor por defecto a una columna ya existente?
La clave está en volver a declarar la columna completa con MODIFY COLUMN y sumarle lo nuevo. Mantienes el tipo igual y agregas la propiedad extra.
sql
ALTER TABLE tests MODIFY COLUMN prices DECIMAL(10,3) NOT NULL DEFAULT 10;
Si ahora quisieras quitarle ese default, no puedes dejar DEFAULT NULL mientras la columna esté como NOT NULL, porque sería una contradicción. Tendrías que permitir nulos primero.
Con estos subcomandos del ALTER TABLE ya puedes moldear tus tablas como plastilina: agregar, borrar, mover, modificar y renombrar. ¿Tú en qué situación real has tenido que reescribir la estructura de una tabla? Cuéntame en los comentarios.