¿Qué es una base de datos?
Una base de datos es una colección organizada de información que se almacena y se puede consultar electrónicamente. Existen distintos tipos según cómo estructuran los datos:
- Relacionales: organizan la información en tablas con filas y columnas (MySQL, PostgreSQL, SQL Server).
- De documentos: almacenan registros como documentos flexibles, normalmente en JSON (MongoDB).
- Clave-valor: pares simples de clave e información asociada, optimizados para velocidad (Redis).
- De grafos: modelan relaciones complejas entre entidades (Neo4j).
- De series temporales: pensadas para datos con marca de tiempo, como métricas o sensores (InfluxDB).
Las bases de datos relacionales siguen siendo las más usadas en el mundo empresarial porque su modelo —tablas con filas (registros) y columnas (campos)— es intuitivo y muy eficiente para datos estructurados: usuarios, pedidos, transacciones, inventarios, etc.
Un sistema de gestión de bases de datos (o DBMS, por sus siglas en inglés) es el software que permite crear, modificar, consultar y administrar esa información. MySQL, PostgreSQL, Oracle, SQL Server y MongoDB son ejemplos de DBMS ampliamente usados hoy en día.
¿Qué es MySQL y por qué se volvió tan popular?
MySQL es un sistema de gestión de bases de datos relacionales de código abierto, mantenido actualmente por Oracle Corporation. Su popularidad —es la base de datos detrás de WordPress, la mayoría de aplicaciones PHP y buena parte de la infraestructura web mundial— se explica por cuatro razones principales:
- Escalabilidad: maneja desde blogs pequeños hasta aplicaciones con millones de registros, y crece junto con las necesidades del proyecto.
- Robustez: es conocida por su estabilidad y fiabilidad en entornos de producción críticos, con años de uso en empresas de todos los tamaños.
- Costo-efectividad: al ser software de código abierto, se puede usar sin costos de licencia, respaldado además por una comunidad activa que aporta soporte y mejoras constantes.
- Compatibilidad amplia: se integra fácilmente con C, C++, Java, Python, PHP, Node.js y prácticamente cualquier lenguaje moderno, lo que la hace una opción natural para casi cualquier stack tecnológico.
Sentencias SQL esenciales que deberías conocer
A continuación repasamos las sentencias más importantes de SQL, el lenguaje que se usa para interactuar con MySQL y la mayoría de bases de datos relacionales.
SELECT — Consultar datos
Recupera datos de una o varias tablas. Es, por lejos, la sentencia más usada.
SELECT * FROM employees; INSERT — Agregar registros
Añade nuevas filas de datos a una tabla existente.
INSERT INTO employees (first_name, last_name, salary)
VALUES ('John', 'Doe', 50000); UPDATE — Modificar registros
Actualiza datos ya existentes. Siempre usa una cláusula WHERE para evitar modificar toda la tabla por error.
UPDATE employees
SET salary = 55000
WHERE id = 1; DELETE — Eliminar registros
Elimina filas de una tabla según una condición. Igual que con UPDATE, omitir el WHERE es uno de los errores más costosos en producción.
DELETE FROM employees
WHERE id = 1; CREATE — Crear tablas y bases de datos
Crea una nueva tabla, base de datos, índice u otro objeto.
CREATE TABLE employees (
id INT PRIMARY KEY,
first_name VARCHAR(255),
last_name VARCHAR(255),
salary INT
); ALTER — Modificar la estructura de una tabla
Permite añadir, modificar o eliminar columnas de una tabla existente sin recrearla desde cero.
ALTER TABLE employees
ADD email VARCHAR(255); DROP — Eliminar tablas o bases de datos
Elimina permanentemente una tabla, base de datos o índice completo. Úsala con mucho cuidado: no hay confirmación intermedia.
DROP TABLE employees; JOIN — Combinar datos de varias tablas
Combina filas de dos o más tablas relacionadas mediante una columna en común, algo esencial en cualquier base de datos relacional bien normalizada.
SELECT employees.first_name, employees.last_name, departments.name
FROM employees
JOIN departments ON employees.department_id = departments.id; LIMIT — Limitar resultados
Restringe el número de filas devueltas por una consulta, muy útil para paginación o para explorar tablas grandes sin sobrecargar el cliente.
SELECT * FROM employees
LIMIT 5; COUNT — Contar registros
Cuenta el número de filas que cumplen (o no) una condición.
SELECT COUNT(*) FROM employees; GROUP BY — Agrupar resultados
Agrupa filas según una o más columnas, generalmente combinado con funciones de agregación como SUM, AVG o COUNT.
SELECT department, SUM(salary)
FROM employees
GROUP BY department; HAVING — Filtrar grupos agregados
Filtra los resultados de un GROUP BY según valores agregados. Es al agrupamiento lo que WHERE es a las filas individuales.
SELECT department, SUM(salary)
FROM employees
GROUP BY department
HAVING SUM(salary) > 1000000; INNER JOIN, LEFT JOIN y RIGHT JOIN
Existen varios tipos de JOIN según qué filas quieras conservar cuando no hay coincidencia entre tablas:
- INNER JOIN: devuelve solo las filas que tienen coincidencia en ambas tablas.
SELECT employees.first_name, employees.last_name, orders.order_number
FROM employees
INNER JOIN orders ON employees.id = orders.employee_id; - LEFT JOIN: devuelve todas las filas de la tabla izquierda, tengan o no coincidencia en la derecha.
SELECT customers.first_name, customers.last_name, orders.order_number
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id; - RIGHT JOIN: es el espejo del anterior, devuelve todas las filas de la tabla derecha.
SELECT customers.first_name, customers.last_name, orders.order_number
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.id; UNION — Combinar resultados de varias consultas
Combina el resultado de dos o más sentencias SELECT en un único conjunto de resultados, siempre que tengan el mismo número de columnas y tipos compatibles.
SELECT first_name, last_name, salary
FROM employees
UNION
SELECT name, 'N/A', 0
FROM departments; TRUNCATE — Vaciar una tabla
Elimina todos los registros de una tabla de forma mucho más rápida que DELETE, ya que no genera registros de reversión individuales. A diferencia de DELETE, también reinicia el contador de autoincremento.
TRUNCATE TABLE employees; RENAME — Renombrar objetos
Cambia el nombre de una tabla o base de datos, útil cuando el nombre original quedó desactualizado o mal escrito.
RENAME TABLE employees TO staff; EXPLAIN — Analizar el rendimiento de una consulta
EXPLAIN muestra el plan de ejecución que MySQL usará para resolver una consulta SELECT: qué tablas e índices utilizará, el tipo de unión aplicado y cuántas filas examinará. Es la herramienta principal para diagnosticar consultas lentas.
EXPLAIN SELECT customers.first_name, customers.last_name, orders.order_number
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.id; Entre los campos más relevantes que devuelve EXPLAIN están:
- type: el tipo de acceso usado (
ALL,index,range,ref, entre otros).ALLsuele indicar una revisión completa de la tabla, señal de que falta un índice. - possible_keys y key: los índices disponibles y el que realmente se usó.
- rows: una estimación de cuántas filas se examinarán para resolver la consulta.
- Extra: información adicional, como si se está usando un índice o una condición
WHEREde forma eficiente.
Usa EXPLAIN antes y después de agregar índices o modificar una consulta para comparar el impacto real en el rendimiento. Ten en cuenta que solo funciona con sentencias SELECT y está disponible en el cliente de línea de comandos.
MySQL combina escalabilidad, robustez, costo-efectividad y una comunidad enorme, razones suficientes para explicar por qué sigue siendo la base de datos relacional más usada del mundo casi tres décadas después de su creación. Dominar las sentencias que repasamos aquí —desde un simple `SELECT` hasta el análisis de rendimiento con `EXPLAIN`— es una base sólida para cualquier persona que trabaje con datos, sin importar si administra servidores, desarrolla aplicaciones o simplemente necesita entender cómo funciona el motor detrás de su sitio web. Si tienes dudas durante la implementación, nuestro equipo de soporte técnico está disponible 24/7 para ayudarte.
Hosting con LiteSpeed, NVMe y soporte 24/7 desde $3/mes.