Es muy probable que -tarde o temprano- surjan cambios en tu aplicación que requieran la modificación de tu base de datos. La mayoría de estos cambios suelen ocurrir por la inclusión de nuevos requerimientos o para solucionar pequeños errores en el diseño.

Algunos de los cambios pueden afectar la estructura de tus tablas, siendo los más frecuentes: agregar campos nuevos, eliminar un campo, renombrar un campo, modificar tipos de datos, entre otros. Veamos algunos de ellos:

Agregar campos nuevos

Puedes agregar un nuevo campo usando el comando ALTER TABLE con la cláusula ADD COLUMN. Por ejemplo, vamos a agregar el campo first_name a nuestra tabla employees:

MariaDB [storage]> ALTER TABLE employees ADD COLUMN first_name VARCHAR(100);

El comando ALTER TABLE va seguido del nombre de la tabla, luego de la cláusula ADD COLUMN y por último la definición del campo, es decir, el nombre del campo seguido del tipo de dato y sus restricciones (así como cuando creaste la tabla).

Por defecto, los campos se agregarán al final, pero también puedes agregarlos en una posición específica, usando FIRST para añadirlos al inicio o AFTER para añadirlos después de otro campo.

Ahora verifiquemos el cambio ejecutando el comando DESC employees. Nos mostrará un resultado como el siguiente:

+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| branch_id  | bigint(20) unsigned | YES  |     | NULL    |                |
| dni        | varchar(20)         | YES  | UNI | NULL    |                |
| name       | varchar(150)        | YES  |     | NULL    |                |
| email      | varchar(100)        | YES  |     | NULL    |                |
| birth_date | date                | YES  |     | NULL    |                |
| created_at | timestamp           | YES  |     | NULL    |                |
| updated_at | timestamp           | YES  |     | NULL    |                |
| first_name | varchar(100)        | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+
9 rows in set (0.001 sec)

Es recomendable que ubiques los campos de la tabla siguiendo un orden lógico: primero la clave primaria, luego aquellos que formen las claves foráneas, y finalmente los demás campos.

Renombrar un campo

Puedes cambiar el nombre de un campo usando el comando ALTER TABLE con la cláusula CHANGE COLUMN. Por ejemplo, vamos a renombrar el campo name a last_name:

MariaDB [storage]> ALTER TABLE employees CHANGE COLUMN name last_name VARCHAR(150);

La cláusula CHANGE COLUMN te pide que especifiques el nombre actual del campo y luego el nuevo nombre que darás a ese campo, seguido del tipo de dato y las restricciones (en caso de tenerlas).

Aunque solo desees cambiar el nombre del campo, si usas la cláusula CHANGE COLUMN debes especificar su definición, ya que ésta también será modificada.

Ahora, si ejecutamos DESC employees podemos ver que name ha sido renombrado a last_name:

+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| branch_id  | bigint(20) unsigned | YES  |     | NULL    |                |
| dni        | varchar(20)         | YES  | UNI | NULL    |                |
| last_name  | varchar(150)        | YES  |     | NULL    |                |
| email      | varchar(100)        | YES  |     | NULL    |                |
| birth_date | date                | YES  |     | NULL    |                |
| created_at | timestamp           | YES  |     | NULL    |                |
| updated_at | timestamp           | YES  |     | NULL    |                |
| first_name | varchar(100)        | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+
9 rows in set (0.001 sec)

Cambiar tipo de datos y/o restricciones

El comando ALTER TABLE con la cláusula MODIFY COLUMN nos permite cambiar el tipo de dato y/o restricciones de un campo, solo basta con colocar su nombre y su nueva definición:

MariaDB [storage]> ALTER TABLE employees MODIFY COLUMN last_name VARCHAR(100);

Aunque usando la cláusula CHANGE COLUMN también puedes lograr esto, la cláusula MODIFY COLUMN es la más recomendable si solo deseas cambiar la definición de un campo.

Al ejecutar DESC employees veremos:

+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| branch_id  | bigint(20) unsigned | YES  |     | NULL    |                |
| dni        | varchar(20)         | YES  | UNI | NULL    |                |
| last_name  | varchar(100)        | YES  |     | NULL    |                |
| email      | varchar(100)        | YES  |     | NULL    |                |
| birth_date | date                | YES  |     | NULL    |                |
| created_at | timestamp           | YES  |     | NULL    |                |
| updated_at | timestamp           | YES  |     | NULL    |                |
| first_name | varchar(100)        | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+
9 rows in set (0.001 sec)

Pero hagamos algo interesante, vamos a mover first_name para que esté después del campo dni:

MariaDB [storage]> ALTER TABLE employees MODIFY COLUMN first_name VARCHAR(100) AFTER dni;

Ahora, si ejecutamos DESC employees nuevamente:

+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| branch_id  | bigint(20) unsigned | YES  |     | NULL    |                |
| dni        | varchar(20)         | YES  | UNI | NULL    |                |
| first_name | varchar(100)        | YES  |     | NULL    |                |
| last_name  | varchar(100)        | YES  |     | NULL    |                |
| email      | varchar(100)        | YES  |     | NULL    |                |
| birth_date | date                | YES  |     | NULL    |                |
| created_at | timestamp           | YES  |     | NULL    |                |
| updated_at | timestamp           | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+
9 rows in set (0.001 sec)

Eliminar campos

Para eliminar un campo debes usar el comando ALTER TABLE seguido del nombre de la tabla, luego la cláusula DROP COLUMN y por último el nombre del campo que deseas eliminar. Por ejemplo:

MariaDB [storage]> ALTER TABLE employees DROP COLUMN email;

Si ejecutamos el comando DESC employees, veremos que el campo email no está:

+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| branch_id  | bigint(20) unsigned | YES  |     | NULL    |                |
| dni        | varchar(20)         | YES  | UNI | NULL    |                |
| first_name | varchar(100)        | YES  |     | NULL    |                |
| last_name  | varchar(100)        | YES  |     | NULL    |                |
| birth_date | date                | YES  |     | NULL    |                |
| created_at | timestamp           | YES  |     | NULL    |                |
| updated_at | timestamp           | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+
8 rows in set (0.001 sec)

Recuerda que cuando eliminas un campo también borras la información almacenada en éste.

Puedes seguir practicando agregando y eliminando campos en la tabla. En la siguiente lección aprenderemos sobre claves primarias y foráneas, así como las relaciones entre las tablas de tu base de datos.

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Crear y eliminar tablas en MySQL / MariaDB Lección siguiente Relaciones entre tablas de bases de datos