Qué es MySQL

MySQL es una base de datos relacional open source que guarda los datos en tablas y los consulta con SQL. Con el motor InnoDB ofrece transacciones ACID, claves foráneas y bloqueo por fila.

Actualizado el 5 min de lectura

Objetivos de aprendizaje

Después de leer este artículo podrás:

  • Entender qué es MySQL y cómo guarda y consulta datos
  • Conocer InnoDB, las transacciones y las series de versión LTS e Innovation
  • Saber cuándo MySQL es la opción correcta y cuándo no
En esta página

Casi todo sistema necesita guardar datos que se relacionan entre sí: clientes, pedidos, productos, pagos. En lugar de repartirlos en archivos, usas una base de datos, que mantiene la información correcta aunque varias personas escriban al mismo tiempo. MySQL es una de las bases relacionales más conocidas para ese trabajo, y la encuentras en hosting compartido, detrás de sitios WordPress y en muchas APIs.

AplicaciónSELECT c.email, SUM(o.total)FROM customers c JOIN orders oSQLfilasMySQLservidor SQL multihiloInnoDBmotor por defectoACIDMVCCbloqueo por filacustomersidemailordersidcustomer_idtotalclave foránea
El servidor recibe el SQL, el motor InnoDB lee las tablas unidas por clave foránea y las filas vuelven a la aplicación.

¿Qué es MySQL?#

MySQL es un sistema gestor de bases de datos relacionales (SGBD) mantenido por Oracle. Relacional significa que los datos están en tablas, con filas y columnas, y que las tablas se enlazan mediante claves. El "SQL" del nombre viene de Structured Query Language, el lenguaje estándar para consultar bases de datos.

Según la documentación oficial, MySQL sigue el modelo cliente/servidor: un servidor SQL multihilo habla con varios clientes y bibliotecas. Es open source bajo la licencia GPL. Si no puedes usar la GPL, por ejemplo al incrustar MySQL en un producto comercial, puedes comprar una licencia comercial a Oracle.

No confundas los términos: SQL es el lenguaje y MySQL es uno de los programas que lo entienden. PostgreSQL y SQL Server también usan SQL.

¿Cómo funciona MySQL?#

MySQL corre como un servidor. Tu aplicación abre una conexión (el puerto por defecto es el 3306), envía comandos SQL y recibe filas. Cuatro ideas explican casi todo su comportamiento.

Esquema. Cada tabla tiene columnas con tipos definidos, y la base rechaza datos que incumplen las reglas. Restricciones como NOT NULL, UNIQUE, clave primaria y clave foránea evitan, por ejemplo, un pedido que apunte a un cliente inexistente.

Motor InnoDB. MySQL separa el servidor del motor de almacenamiento. El predeterminado es InnoDB: una tabla creada sin la cláusula ENGINE ya usa InnoDB. Sigue el modelo ACID, con commit, rollback y recuperación ante fallos, y admite claves foráneas, bloqueo por fila y MVCC.

Transacciones. Una transacción agrupa comandos que ocurren todos juntos o no ocurren. Si debitas un saldo y acreditas otro, o valen los dos pasos o ninguno.

MVCC. El control de concurrencia multiversión hace que cada consulta vea una versión consistente de los datos, así que lecturas y escrituras se estorban menos.

Ejemplo: dos tablas y una consulta#

sql
CREATE TABLE customers (
  id    BIGINT AUTO_INCREMENT PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE
);

CREATE TABLE orders (
  id          BIGINT AUTO_INCREMENT PRIMARY KEY,
  customer_id BIGINT NOT NULL,
  total       DECIMAL(10, 2) NOT NULL,
  FOREIGN KEY (customer_id) REFERENCES customers (id)
);

INSERT INTO customers (email) VALUES ('ana@example.com');
INSERT INTO orders (customer_id, total) VALUES (1, 49.90);

SELECT c.email, SUM(o.total) AS gasto
FROM customers c
JOIN orders o ON o.customer_id = c.id
GROUP BY c.email;

La FOREIGN KEY impide un pedido sin cliente, y el JOIN une las dos tablas en la consulta. El conjunto de caracteres predeterminado del servidor es utf8mb4, que cubre tildes y emojis.

Ejemplo: usarlo desde Node.js#

Con el driver mysql2 (npm install mysql2), abres un pool de conexiones y pasas los valores como parámetros. Nunca pongas la contraseña en el código: léela de variables de entorno.

js
import mysql from "mysql2/promise";

const pool = mysql.createPool({
  host: process.env.MYSQL_HOST,
  user: process.env.MYSQL_USER,
  password: process.env.MYSQL_PASSWORD,
  database: process.env.MYSQL_DATABASE,
  connectionLimit: 10,
});

const [rows] = await pool.execute(
  "SELECT id, email FROM customers WHERE email = ?",
  ["ana@example.com"],
);
console.log(rows);

await pool.end();

El ? es un parámetro: el valor viaja separado del texto SQL, lo que evita la inyección SQL. Nunca armes la consulta concatenando cadenas.

¿Para qué sirve MySQL?#

  • Aplicaciones web y APIs con usuarios, pedidos, permisos e informes.
  • Sitios y tiendas en línea, ya que muchos CMS y plataformas de e-commerce usan MySQL como base predeterminada.
  • Bots que guardan ajustes por servidor, economía o historial de moderación, sobre todo cuando los datos se relacionan.
  • Sistemas de registro e inventario, donde una operación a medias es inaceptable.

¿Cuándo no usar MySQL?#

  • Cachés y contadores que cambian todo el tiempo: un almacén en memoria como Redis responde más rápido en ese papel.
  • Archivos grandes: imágenes y videos van mejor en almacenamiento de objetos. Guarda en la base solo la ruta o la URL.
  • Datos sin estructura fija y sin relaciones: una base de documentos como MongoDB puede ser más directa.
  • Consultas analíticas muy complejas o extensiones avanzadas: compáralo con PostgreSQL.

Para decidir entre las opciones, lee qué base de datos elegir. Si dudas entre las dos relacionales más comunes, mira PostgreSQL vs MySQL.

¿Qué versiones de MySQL existen?#

MySQL tiene dos líneas de versiones. Las series LTS solo reciben las correcciones necesarias y no eliminan funciones dentro de la serie. Con Oracle Lifetime Support, cada LTS tiene 5 años de soporte principal más 3 de soporte extendido. Las series Innovation traen funciones nuevas, pueden cambiar o eliminar comportamientos y solo tienen soporte hasta la siguiente Innovation.

Una serie que llega al fin de su vida útil (EOL) ya no recibe actualizaciones, y la página de fin de vida de Oracle lista las fechas de cada una. Para producción, elige una LTS con soporte y actualiza de una LTS a la siguiente sin saltarte ninguna.

Antes de cualquier actualización, ten una copia de tu base. La guía de cómo hacer una copia de seguridad de una base de datos explica el paso a paso.

Cómo hacerlo en Square Cloud#

En Square Cloud, el hosting de MySQL empieza en el plan Standard; Hobby no incluye bases de datos. Creas la base en el panel, siempre en una versión reciente. Queda lista en segundos y corre en el mismo datacenter que tus aplicaciones, con una latencia media de alrededor de 1 ms y TLS obligatorio.

Puedes tomar snapshots manuales cuando quieras, y todo plan que incluye bases de datos tiene también un snapshot automático diario. Un snapshot se puede restaurar en la misma base, en otra del mismo motor o en una base nueva, o descargar como .zip. Para conectar, guarda el host, el puerto y la contraseña que muestra el panel en las variables de entorno de la aplicación (como MYSQL_HOST y MYSQL_PASSWORD del ejemplo de Node.js). Después apunta el driver a la CA del certificado descargado y reinicia la aplicación.

Mira el hosting de MySQL en Square Cloud y, para el paso a paso general, cómo hospedar una base de datos.

Hosting de bases de datos

MongoDB, PostgreSQL, MySQL y Redis junto a tu app

Más información

Preguntas frecuentes

¿MySQL es gratis?

El software es open source bajo la licencia GPL, así que puedes descargarlo, usarlo y modificarlo sin pagar licencia. Oracle también vende una edición comercial para quien no puede usar la GPL. Ejecutar el servidor sí cuesta máquina, memoria y almacenamiento.

¿MySQL y SQL son lo mismo?

No. SQL es el lenguaje que se usa para consultar bases de datos relacionales. MySQL es un programa, el servidor de base de datos, que entiende SQL.

¿MySQL es SQL o NoSQL?

Es una base SQL (relacional): los datos viven en tablas con un esquema definido. También tiene el tipo JSON para guardar documentos dentro de una columna, pero no reemplaza a una base de documentos en todos los casos.

¿Qué versión de MySQL debo usar?

Para producción, usa una serie LTS con soporte. Solo recibe correcciones y no elimina funciones dentro de la serie. Evita empezar una base nueva en una versión que ya llegó al fin de su vida útil (EOL).

Siguiente artículoMariaDB o MySQL: diferencias¿MariaDB o MySQL? MariaDB es un fork de MySQL y hoy los dos divergen en JSON, versiones, replicación y funciones. Mira la tabla y cuándo usar cada uno.

Más en Bases de datos

Ver los 24 artículos