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