Definición y Creación de Esquemas
El lenguaje de definición de datos (DDL) en MySQL permite establecer la estructura fundamental donde se almacenará la información. Para instanciar una nueva tabla, se utiliza la sentencia CREATE TABLE, especificando el nombre, las columnas con sus respectivos tipos y las reglas de integridad.
La sintaxis básica incluye configuraciones críticas como el motor de almacenamiento y la codificación de caracteres:
CREATE TABLE nombre_tabla (
columna1 tipo_dato restriccion,
columna2 tipo_dato restriccion
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Descripción de la tabla';
- ENGINE=InnoDB: Define el motor que gestiona el almaceanmiento y las transacciones.
- DEFAULT CHARSET=utf8mb4: Establece el juego de caracteres para soportar diversos idiomas y emojis.
- COMMENT: Añade metadatos descriptivos a la tabla.
Tipos de Datos Comunes
Seleccionar el tipo adecuado optimiza el espacio y el rendimiento:
- INT: Almacena valores numéricos enteros.
- FLOAT / DECIMAL: Utilizados para números con punto decimal.
- CHAR(M): Cadena de longitud fija (rellena espacios si es menor).
- VARCHAR(M): Cadena de longitud variable (más eficiente para textos de tamaño fluctuante).
Nota: En tipos como INT(M), el valor M indica solo el ancho de visualización, no limita el rango de almacenamiento. En CHAR(M), M limita la cantidad máxima de caracteres.
Restricciones de Integridad
Las constraints aseguran la validez y consistencia de los datos insertados:
- PRIMARY KEY: Identificador único y no nulo para cada fila (ej. DNI o ID).
- FOREIGN KEY: Vincula datos entre dos tablas para mantener la consistencia referencial.
- NOT NULL: Obliga a que la columna tenga un valor.
- DEFAULT: Asigna un valor predeterminado si no se especifica ninguno.
- AUTO_INCREMENT: Genera automáticamente una secuencia numérica creciente (solo para enteros).
Ejemplo Práctico de Creación
A continuación, se define una tabla para gestionar empleados, estableciendo un identificador único y un campo para el nombre:
mysql> CREATE TABLE registro_empleados (
-> cod_emp INT(5) PRIMARY KEY COMMENT 'Codigo empleado',
-> nombre_completo VARCHAR(50) COMMENT 'Nombre del trabajador'
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT 'Tabla de personal';
mysql> SHOW TABLES;
+----------------------+
| Tables_in_empresa |
+----------------------+
| registro_empleados |
+----------------------+
Inspección de la Estructura
Para visualizar las coulmnas, tipos y restricciones de una tabla existente, se emplea el comando DESCRIBE o su abreviatura DESC:
mysql> DESC registro_empleados;
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| cod_emp | int(5) | NO | PRI | NULL | |
| nombre_completo | varchar(50) | YES | | NULL | |
+-----------------+-------------+------+-----+---------+-------+
Modificación de Tablas (ALTER TABLE)
Los esquemas de base de datos evolucionan. MySQL permite alterar la estructura sin perder los datos existentes mediante la sentencia ALTER TABLE.
Renombrar una Tabla
Se puede cambiar el identificador de la tabla completa:
# Cambiar nombre de registro_empleados a plantilla_personal
mysql> ALTER TABLE registro_empleados RENAME plantilla_personal;
mysql> SHOW TABLES;
+----------------------+
| Tables_in_empresa |
+----------------------+
| plantilla_personal |
+----------------------+
Modificar Columnas Existentes
La cláusula CHANGE permite renombrar una columna y modificar su definición simultáneamente:
# Renombrar cod_emp a id_trabajador
mysql> ALTER TABLE plantilla_personal CHANGE cod_emp id_trabajador INT(5) COMMENT 'ID unico';
mysql> DESC plantilla_personal;
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| id_trabajador | int(5) | NO | PRI | NULL | |
| nombre_completo | varchar(50) | YES | | NULL | |
+-----------------+-------------+------+-----+---------+-------+
Para activar la autoincrementación en una clave primaria:
mysql> ALTER TABLE plantilla_personal CHANGE id_trabajador id_trabajador INT(5) AUTO_INCREMENT;
Agregar Nuevas Columnas
Es posible insertar campos en posiciones específicas o al final de la tabla.
Añadir al inicio:
# Agregar columna estado como primer campo
mysql> ALTER TABLE plantilla_personal ADD estado VARCHAR(10) FIRST;
mysql> DESC plantilla_personal;
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| estado | varchar(10) | YES | | NULL | |
| id_trabajador | int(5) | NO | PRI | NULL | |
| nombre_completo | varchar(50) | YES | | NULL | |
+-----------------+-------------+------+-----+---------+-------+
Añadir después de una columna específica:
# Agregar departamento despues del nombre
mysql> ALTER TABLE plantilla_personal ADD departamento VARCHAR(30) AFTER nombre_completo;
Añadir múltiples columnas:
# Agregar telefono y email al final
mysql> ALTER TABLE plantilla_personal ADD (telefono VARCHAR(15), email VARCHAR(50));
Eliminar Columnas
Para remover campos que ya no son necesarios, se utiliza DROP:
# Eliminar una columna
mysql> ALTER TABLE plantilla_personal DROP estado;
# Eliminar múltiples columnas simultaneamente
mysql> ALTER TABLE plantilla_personal DROP telefono, DROP email;
Gestión de Comentarios y Metadatos
Los comentarios ayudan a documentar el esquema directamente en la base de datos.
Modificar comentario de la tabla:
mysql> ALTER TABLE plantilla_personal COMMENT 'Listado actualizado de empleados';
Modificar comentario de una columna:
mysql> ALTER TABLE plantilla_personal MODIFY nombre_completo VARCHAR(50) COMMENT 'Nombre legal del empleado';
Eliminación Completa de Tablas
La sentencia DROP TABLE borra permanentemente la estructura y todos los datos contenidos. Esta operación no se puede deshacer:
mysql> DROP TABLE plantilla_personal;