Fecha Actual:30 mayo, 2025

¿Qué es MySQL?

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

  1. 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.
  2. 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 (como mysql.connector en Python).
  3. 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.
  4. 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»).
  5. Filas (Registros): Representan una instancia particular de la entidad definida por la tabla (por ejemplo, un cliente específico con sus datos).
  6. 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: INT para números enteros, VARCHAR(longitud) para cadenas de texto de longitud variable, DATE para fechas, FLOAT para números decimales).
  • <restricciones>: Reglas opcionales para la columna (ejemplos: NOT NULL para indicar que la columna no puede estar vacía, UNIQUE para asegurar que todos los valores en la columna sean únicos, AUTO_INCREMENT para 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
  • 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: BOOLEAN o TINYINT(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 (o LEFT 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 valores NULL para las columnas de esa tabla.  
  • RIGHT JOIN (o RIGHT 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 valores NULL para 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;

Share