
MySQL es un sistema de gestión de bases de datos relacional (RDBMS) de código abierto. En términos sencillos, es un software que te permite organizar, almacenar y gestionar grandes cantidades de datos de manera eficiente. Piensa en él como una hoja de cálculo muy potente y organizada, capaz de manejar información compleja y permitirte realizar búsquedas y manipulaciones avanzadas.
Componentes Fundamentales de MySQL
- Servidor MySQL (mysqld): Es el corazón del sistema. Se encarga de gestionar las bases de datos, recibir las peticiones de los clientes y realizar las operaciones solicitadas.
- Cliente MySQL: Es una herramienta que te permite interactuar con el servidor MySQL. Puede ser una interfaz de línea de comandos (
mysql), una aplicación gráfica (como MySQL Workbench o Dbeaver) o una biblioteca que se integra en un lenguaje de programación (comomysql.connectoren Python). - Bases de Datos: Son contenedores lógicos donde se almacenan las tablas. Puedes tener múltiples bases de datos en un mismo servidor MySQL, cada una con su propio conjunto de tablas.
- Tablas: Son estructuras dentro de una base de datos que organizan los datos en filas y columnas. Cada tabla representa una entidad específica (por ejemplo, «clientes», «productos», «pedidos»).
- Filas (Registros): Representan una instancia particular de la entidad definida por la tabla (por ejemplo, un cliente específico con sus datos).
- Columnas (Campos): Definen los atributos de la entidad. Cada columna tiene un nombre y un tipo de dato específico (por ejemplo, «nombre» de tipo TEXT, «edad» de tipo INT).
Código y Sintaxis Básica de Consultas (SQL)
MySQL utiliza un lenguaje estándar llamado SQL (Structured Query Language) para interactuar con las bases de datos. Aquí te presento las operaciones fundamentales y su sintaxis básica:
1. Conectarse al Servidor MySQL (a través del cliente de línea de comandos):
mysql -u <nombre_de_usuario> -p
Reemplaza <nombre_de_usuario> con tu nombre de usuario de MySQL. Te pedirá la contraseña si la tienes configurada.
2. Mostrar las Bases de Datos Existentes:
SHOW DATABASES;
3. Crear una Nueva Base de Datos:
CREATE DATABASE <nombre_de_la_base_de_datos>;
Ejemplo:
CREATE DATABASE mi_tienda;
4. Seleccionar una Base de Datos para Trabajar:
USE <nombre_de_la_base_de_datos>;
Ejemplo:
USE mi_tienda;
5. Mostrar las Tablas Dentro de la Base de Datos Seleccionada:
SHOW TABLES;
6. Crear una Nueva Tabla:
CREATE TABLE <nombre_de_la_tabla> (
<nombre_columna1> <tipo_de_dato> <restricciones>,
<nombre_columna2> <tipo_de_dato> <restricciones>,
...
PRIMARY KEY (<nombre_columna_clave>)
);
<nombre_de_la_tabla>: El nombre que le darás a la tabla.<nombre_columna>: El nombre de cada columna.<tipo_de_dato>: El tipo de información que almacenará la columna (ejemplos:INTpara números enteros,VARCHAR(longitud)para cadenas de texto de longitud variable,DATEpara fechas,FLOATpara números decimales).<restricciones>: Reglas opcionales para la columna (ejemplos:NOT NULLpara indicar que la columna no puede estar vacía,UNIQUEpara asegurar que todos los valores en la columna sean únicos,AUTO_INCREMENTpara que un número se genere automáticamente con cada nueva fila).PRIMARY KEY: Especifica la columna o columnas que identifican de forma única cada fila en la tabla.
Ejemplo: Crear una tabla llamada clientes:
CREATE TABLE clientes (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
fecha_registro DATE
);
7. Describir la Estructura de una Tabla:
DESCRIBE <nombre_de_la_tabla>;
Ejemplo:
DESCRIBE clientes;
8. Insertar Datos en una Tabla:
INSERT INTO <nombre_de_la_tabla> (<columna1>, <columna2>, ...) VALUES (<valor1>, <valor2>, ...);
Si quieres insertar valores en todas las columnas, puedes omitir la lista de columnas:
INSERT INTO <nombre_de_la_tabla> VALUES (<valor1>, <valor2>, ...);
Ejemplo:
INSERT INTO clientes (nombre, email, fecha_registro) VALUES ('Ana Pérez', '[email protected]', '2025-04-30');
INSERT INTO clientes VALUES (NULL, 'Carlos López', '[email protected]', '2025-04-29');
9. Seleccionar Datos de una Tabla (Consultas):
La instrucción SELECT es la más fundamental para recuperar información.
-
Seleccionar todas las columnas de una tabla:
SELECT * FROM <nombre_de_la_tabla>;Ejemplo:
SELECT * FROM clientes; -
Seleccionar columnas específicas:
SELECT <columna1>, <columna2>, ... FROM <nombre_de_la_tabla>;Ejemplo:
SELECT nombre, email FROM clientes; -
Filtrar filas con la cláusula
WHERE:SELECT <columnas> FROM <nombre_de_la_tabla> WHERE <condicion>;Ejemplos de condiciones:
- Igualdad:
WHERE nombre = 'Ana Pérez' - Mayor que:
WHERE id > 2 - Menor que:
WHERE fecha_registro < '2025-04-30' - Diferente de:
WHERE email != '[email protected]' - Operadores lógicos (
AND,OR,NOT):WHERE nombre = 'Ana Pérez' AND fecha_registro > '2025-04-25' - Rangos (
BETWEEN):WHERE id BETWEEN 1 AND 3 - Coincidencia de patrones (
LIKE):WHERE nombre LIKE 'A%'(nombres que empiezan con ‘A’)WHERE email LIKE '%@email.com'(emails que terminan con ‘@email.com’)WHERE nombre LIKE '_arlos%'(nombres donde el segundo carácter es ‘a’)
- Valores en una lista (
IN):WHERE id IN (1, 3, 5) - Valores nulos (
IS NULL,IS NOT NULL):WHERE email IS NULL
- Igualdad:
-
Ordenar los resultados con
ORDER BY:SELECT <columnas> FROM <nombre_de_la_tabla> ORDER BY <columna> <ASC|DESC>;ASC: Orden ascendente (por defecto).DESC: Orden descendente.
Ejemplo:
SELECT * FROM clientes ORDER BY nombre; SELECT * FROM clientes ORDER BY fecha_registro DESC; -
Limitar el número de resultados con
LIMIT:SELECT <columnas> FROM <nombre_de_la_tabla> LIMIT <numero>;Para obtener un rango de resultados (paginación):
SELECT <columnas> FROM <nombre_de_la_tabla> LIMIT <offset>, <numero>;<offset>: El índice de la primera fila a devolver (empezando desde 0).<numero>: El número de filas a devolver.
Ejemplo:
SELECT * FROM clientes LIMIT 2; -- Obtener los dos primeros clientes SELECT * FROM clientes LIMIT 1, 2; -- Obtener el segundo y tercer cliente
10. Actualizar Datos en una Tabla:
UPDATE <nombre_de_la_tabla> SET <columna1> = <nuevo_valor1>, <columna2> = <nuevo_valor2>, ... WHERE <condicion>;
¡Es crucial usar la cláusula WHERE! Si la omites, actualizarás todas las filas de la tabla.
Ejemplo:
UPDATE clientes SET email = '[email protected]' WHERE nombre = 'Ana Pérez';
UPDATE clientes SET fecha_registro = '2025-05-01'; -- ¡Peligro! Actualizará todas las filas
11. Eliminar Datos de una Tabla:
DELETE FROM <nombre_de_la_tabla> WHERE <condicion>;
¡Ten mucho cuidado con la cláusula WHERE! Si la omites, eliminarás todas las filas de la tabla.
Ejemplo:
DELETE FROM clientes WHERE id = 3;
DELETE FROM clientes; -- ¡Peligro! Eliminará todas las filas
12. Eliminar una Tabla:
DROP TABLE <nombre_de_la_tabla>;
¡Esta acción es irreversible!
Ejemplo:
DROP TABLE clientes;
13. Eliminar una Base de Datos:
DROP DATABASE <nombre_de_la_base_de_datos>;
¡Esta acción es irreversible y elimina todas las tablas dentro de la base de datos!
Ejemplo:
DROP DATABASE mi_tienda;
Tipos de Datos Comunes en MySQL:
- Numéricos:
INT,BIGINT,FLOAT,DOUBLE,DECIMAL - Fecha y Hora:
DATE,DATETIME,TIMESTAMP,TIME,YEAR - Cadena de Texto:
VARCHAR(longitud),TEXT,MEDIUMTEXT,LONGTEXT,CHAR(longitud) - Booleanos:
BOOLEANoTINYINT(1)(0 para falso, 1 para verdadero)
Relaciones entre Tablas (un tema más avanzado):
En bases de datos relacionales, las tablas a menudo están relacionadas entre sí para evitar la redundancia de datos y garantizar la integridad. Las relaciones se definen mediante claves foráneas (FOREIGN KEYS) que hacen referencia a las claves primarias (PRIMARY KEYS) de otras tablas.
Los tipos de relaciones más comunes son:
- Uno a Uno: Un registro en una tabla se relaciona con como máximo un registro en otra tabla.
- Uno a Muchos: Un registro en una tabla puede relacionarse con múltiples registros en otra tabla.
- Muchos a Muchos: Múltiples registros en una tabla pueden relacionarse con múltiples registros en otra tabla (generalmente se implementa con una tabla intermedia o de unión).
Consultas con Múltiples Tablas (JOIN):
Para combinar datos de múltiples tablas relacionadas, se utiliza la cláusula JOIN. Los tipos de JOIN más comunes son:
INNER JOIN: Devuelve solo las filas donde hay una coincidencia en ambas tablas según la condición especificada.LEFT JOIN(oLEFT OUTER JOIN): Devuelve todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha. Si no hay coincidencia en la tabla derecha, se devuelven valoresNULLpara las columnas de esa tabla.RIGHT JOIN(oRIGHT OUTER JOIN): Devuelve todas las filas de la tabla derecha y las filas coincidentes de la tabla izquierda. Si no hay coincidencia en la tabla izquierda, se devuelven valoresNULLpara las columnas de esa tabla.
La sintaxis básica de un JOIN es:
SELECT <columnas>
FROM <tabla1>
<tipo_de_join> <tabla2> ON <tabla1>.<columna_clave> = <tabla2>.<columna_clave_foranea>;
Ejemplo de Relación y JOIN:
Supongamos que tenemos una tabla pedidos con una columna cliente_id que hace referencia al id de la tabla clientes.
CREATE TABLE pedidos (
id INT AUTO_INCREMENT PRIMARY KEY,
cliente_id INT NOT NULL,
fecha_pedido DATE NOT NULL,
monto DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (cliente_id) REFERENCES clientes(id)
);
INSERT INTO pedidos (cliente_id, fecha_pedido, monto) VALUES (1, '2025-04-28', 120.50);
INSERT INTO pedidos (cliente_id, fecha_pedido, monto) VALUES (2, '2025-04-29', 55.75);
INSERT INTO pedidos (cliente_id, fecha_pedido, monto) VALUES (1, '2025-04-30', 200.00);
Para obtener el nombre del cliente junto con sus pedidos:
SELECT c.nombre, p.fecha_pedido, p.monto
FROM clientes c
INNER JOIN pedidos p ON c.id = p.cliente_id;
Funciones Comunes en MySQL:
MySQL proporciona una amplia gama de funciones para realizar cálculos, manipular cadenas de texto, trabajar con fechas, etc. Algunos ejemplos:
- Funciones de Agregación:
COUNT(),SUM(),AVG(),MIN(),MAX() - Funciones de Cadena:
CONCAT(),LENGTH(),UPPER(),LOWER() - Funciones de Fecha y Hora:
NOW(),CURDATE(),CURTIME(),DATE_FORMAT()
Agrupación de Datos (GROUP BY y HAVING):
La cláusula GROUP BY se utiliza para agrupar filas que tienen los mismos valores en una o más columnas. A menudo se utiliza con funciones de agregación.
La cláusula HAVING se utiliza para filtrar los resultados de un GROUP BY (similar a WHERE pero para grupos).
Ejemplo: Contar cuántos pedidos ha realizado cada cliente:
SELECT c.nombre, COUNT(p.id) AS total_pedidos
FROM clientes c
LEFT JOIN pedidos p ON c.id = p.cliente_id
GROUP BY c.nombre
ORDER BY total_pedidos DESC;
Ejemplo: Mostrar solo los clientes que han realizado más de un pedido:
SELECT c.nombre, COUNT(p.id) AS total_pedidos
FROM clientes c
LEFT JOIN pedidos p ON c.id = p.cliente_id
GROUP BY c.nombre
HAVING COUNT(p.id) > 1
ORDER BY total_pedidos DESC;