Course
Tutorial de MySQL: Guía completa para principiantes
Los datos constituyen la base de nuestra sociedad cada vez más digital. Desde aplicaciones móviles y sistemas bancarios hasta motores de búsqueda y chatbots de IA de última generación como ChatGPT, ninguna de estas herramientas sería posible sin datos. ¿Te has preguntado alguna vez dónde se almacenan todos estos datos? Lo has adivinado: bases de datos.
Una base de datos es una colección organizada de datos estructurados, normalmente almacenados en un sistema informático. Gran parte de los datos de todo el mundo se almacenan en bases de datos relacionales.
En este tutorial, nos centraremos en MySQL, un popular sistema de gestión de bases de datos relacionales (RDBMS). Respaldada por Oracle, MySQL es una base de datos de código abierto, fiable, escalable y fácil de usar que utilizan algunas de las empresas más importantes del espacio tecnológico, como Meta, Netflix y Airbnb.
Después de leer este artículo, estarás preparado para empezar a utilizar esta popular y consolidada herramienta, desde instalarla en tu ordenador y crear bases de datos hasta realizar consultas SQL básicas y operaciones más avanzadas. ¿Listo para el reto? ¡Empecemos!
Requisitos previos y conceptos básicos
Hay muchos tipos de bases de datos, y cada una es adecuada para almacenar distintos tipos de datos. En los últimos años, se han desarrollado nuevos tipos de bases de datos para hacer frente a la creciente diversidad de formatos de datos. A pesar del auge de las llamadas bases de datos NoSQL, las bases de datos relacionales siguen siendo las más populares.
Las bases de datos relacionales están diseñadas para almacenar datos como colecciones de tablas predefinidas con filas y columnas que están conectadas mediante una o varias relaciones.
La forma estándar de crear, gestionar y comunicarse con bases de datos es SQL (Lenguaje de Consulta Estructurado). SQL es el componente básico de algunos de los más populares del mercado, como PostgreSQL, SQLite y MySQL.
Para seguir este tutorial, te recomendamos que tengas conocimientos básicos de SQL. Una buena forma de empezar es nuestro Curso de Introducción a SQL. También necesitarás MySQL en tu ordenador, así que vamos a ver cómo instalar MySQL.
Certifícate en SQL
Configurar MySQL
Instalar la herramienta es un proceso sencillo. Sólo tienes que descargar el instalador adecuado del sitio web oficial, en función del sistema operativo de tu ordenador, ya sea macOS, Windows o Linux.
Instalación en macOS
Una vez que hayas descargado el instalador del paquete MySQL, sigue las instrucciones del asistente de instalación. Puedes seguir la instalación estándar, aunque también puedes personalizar los componentes a instalar haciendo clic en el botón "Personalizar".
Asistente de instalación de paquetes MySQL: Personalízalo. Fuente: MySQL
Tras una instalación correcta del nuevo Servidor MySQL, completa los pasos de configuración eligiendo el tipo de encriptación por defecto para las contraseñas, definiendo la contraseña raíz y activando (o desactivando) el servidor MySQL al inicio.
Cuando se instala utilizando el instalador de paquetes, los archivos se instalan en un directorio dentro de /usr/local que coincide con el nombre de la versión de instalación y la plataforma.
Instalación en Windows
Instalar MySQL en Windows es bastante sencillo. El método recomendado es descargar Windows Installer y dejar que instale y configure una versión específica de MySQL. Si utilizas la instalación por defecto, Windows iniciará automáticamente MySQL como host local.
Instalación en Linux
Linux admite distintas soluciones para instalar MySQL. MySQL recomienda que utilices una de las distribuciones de Oracle, para la que existen varios métodos de instalación, como puedes ver en la documentación.
Comprender MySQL
Antes de empezar a utilizar MySQL, merece la pena analizar cómo funciona MySQL. Analicemos algunos de sus conceptos básicos.
Arquitectura MySQL
Como muchas otras bases de datos relacionales populares, MySQL está diseñada como una arquitectura cliente-servidor.
En este modelo informático, un servidor está diseñado para alojar datos, gestionar permisos y configuraciones de bases de datos y manejar la mayoría de los recursos y servicios solicitados por el cliente.
En las arquitecturas cliente-servidor más comunes, hay un servidor centralizado y varios clientes. Cualquier ordenador puede ser un servidor si está configurado para prestar un servicio. Sin embargo, los servidores suelen ser máquinas muy potentes y grandes, porque están mejor equipados para gestionar un gran volumen de peticiones y datos.
En cambio, los clientes pueden estar situados en cualquier tipo de ordenador.
Arquitectura cliente-servidor. Fuente: DataCamp
En MySQL, estos dos componentes son el cliente MySQL y el servidor MySQL.
Tipos de datos
Los tipos de datos se utilizan para determinar los valores que puede contener una columna. Funciona como una especie de metadatos que ayudan a SQL a entender qué tipo de datos esperar en cada columna y cómo procesar las consultas contra una columna concreta.
MySQL admite tipos de datos SQL normales en tres categorías principales:
- Tipos numéricos
- Tipos de cadena
- Tipos de fecha y hora
En las tablas siguientes puedes encontrar una visión general de los principales tipos de datos de MySQL.
Tipos de datos numéricos
Tipo de datos |
Descripción |
TINYINT |
Un número entero muy pequeño. |
SMALLINT |
Un número entero pequeño. |
MEDIUMINT |
Un número entero de tamaño medio. |
INT o INTEGRO |
Un número entero estándar. |
BIGINT |
Un número entero grande. |
FLOTA |
Un número de coma flotante. |
DOBLE |
Un número de coma flotante de doble precisión. |
DECIMAL o NUMÉRICO |
Un número en coma fija. |
Tipos de datos de fecha y hora
Tipo de datos |
Descripción |
FECHA |
Un valor de fecha en formato AAAA-MM-DD. |
TIEMPO |
Un valor de tiempo en formato HH:MM:SS. |
FECHA |
Un valor de fecha y hora en formato AAAA-MM-DD HH:MM:SS. |
TIMESTAMP |
Un valor de fecha y hora en formato AAAA-MM-DD HH:MM:SS. |
AÑO |
Un valor de año en formato AAAA o AAAA. |
Tipos de datos de cadena
Tipo de datos |
Descripción |
CHAR |
Una cadena de longitud fija. |
VARCHAR |
Una cadena de longitud variable. |
TINYTEXT |
Una cadena de texto muy pequeña. |
TEXTO |
Una pequeña cadena de texto. |
MEDIUMTEXT |
Una cadena de texto de tamaño medio. |
LONGTEXT |
Una cadena de texto grande. |
ENUM |
Un objeto de cadena que sólo puede tener un valor, elegido de una lista de valores predefinidos. |
SET |
Un objeto de cadena que puede tener cero o más valores, elegidos de una lista de valores predefinidos. |
Acceder a MySQL
Una vez que hayas instalado MySQL en tu ordenador, puedes empezar a utilizarlo desde tu terminal. Para lanzar MySQL, puedes acceder a él con tu nombre de usuario y su contraseña asociada. En este caso, accederemos a MySQL con la cuenta root, junto con la contraseña de root que establecimos durante la instalación. Puesto que estamos iniciando sesión en la misma máquina en la que se ejecuta MySQL, no necesitamos proporcionar información en el parámetro host (-h):
> mysql -uroot -p
Si quieres añadir nuevos usuarios, escribe:
> CREATE USER 'username' IDENTIFIED BY 'password';
Una vez que hayas creado un nuevo usuario, puedes entrar en MySQL utilizando este comando y se mostrará un mensaje de bienvenida, seguido de un prompt mysql>:
> mysql -u username -p
Welcome to the MySQL monitor. Commands end with; or \g.
Your MySQL connection id is 25
Server version: 8.1.0 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
Owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Cómo crear una base de datos MySQL
Crear una base de datos
Es hora de crear tu primera base de datos en MySQL. Para este tutorial, queremos crear una base de datos llamada "datacamp_courses", que contendrá información sobre algunos cursos de DataCamp. La base de datos se aloja localmente.
Para crear una base de datos, utiliza el siguiente comando:
mysql> CREATE DATABASE datacamp_courses;
Para comprobar que la base de datos está creada, escribe lo siguiente y se mostrará una tabla con todas las bases de datos disponibles:
mysql> SHOW databases;
+--------------------+
| Database |
+--------------------+
| datacamp_courses |
| mysql |
+--------------------+
5 rows in set (0,00 sec)
Ahora ya puedes acceder a tu nueva base de datos.
mysql> USE datacamp_courses;
Database changed
Crear una tabla
Hasta ahora, has creado tu primera base de datos. Pero sigue vacía. Ahora vamos a crear la primera tabla de la base de datos. Queremos crear una tabla llamada 'cursos', con información sobre varios cursos disponibles en el catálogo de cursos de DataCamp.
Es hora de crear tu primera tabla en la base de datos "datacamp_cursos". Queremos crear una tabla con información sobre algunos de los cursos del Catálogo de Cursos DataCamp.
La clave principal de la tabla debe ser course_id (observa que sólo ésta está en negrita), y su tipo de datos debe ser un entero. Una clave primaria es una restricción que obliga a que los valores de las columnas no sean nulos y sean únicos. Te permite identificar de forma única una instancia concreta o un conjunto de instancias presentes en la tabla.
Las columnas restantes proporcionan información sobre el nombre del curso, el instructor del curso, el tema del curso y la url.
Para crear la primera tabla de la base de datos "datatacamp_cursos", utiliza el siguiente comando:
mysql> CREATE TABLE courses (
course_id int NOT NULL,
course_name varchar(250) NOT NULL,
instructor_name varchar(250) NOT NULL,
technology varchar(50) NOT NULL,
topic varchar(50) NOT NULL,
PRIMARY KEY (course_id)
);
Consultas SQL básicas
Ya tienes tu primera base de datos y tu primera tabla. ¡Estupendo! Ahora es el momento de añadir algunos datos a la tabla.
Vamos a añadir algunas filas con algunos cursos populares disponibles en nuestro catálogo con la sentencia INSERT. El código siguiente hará la magia.
INSERT INTO
courses (course_id, course_name, instructor_name, technology, topic) VALUES
(1, 'Introduction to SQL', 'Izzy Weber', 'SQL','Data Manipulation'),
(2, 'Database Design', 'Lis Sulmont', 'SQL', 'Data Engineering'),
(3, 'Data Manipulation with pandas', 'Richie Cotton', 'R','Programming'),
(4, 'Generative AI Concepts', 'Daniel Tedesco', 'Theory', 'AI & Machine Learning');
Para comprobar que las filas se han añadido correctamente, vamos a ver todas las filas de la tabla con la sentencia SELECT:
SELECT * FROM courses;
+-----------+-------------------------------+-----------------+------------+-----------------------+
| course_id | course_name | instructor_name | technology | topic |
+-----------+-------------------------------+-----------------+------------+-----------------------+
| 1 | Introduction to SQL | Izzy Weber | SQL | Data Manipulation |
| 2 | Database Design | Lis Sulmont | SQL | Data Engineering |
| 3 | Data Manipulation with pandas | Richie Cotton | R | Programming |
| 4 | Generative AI Concepts | Daniel Tedesco | Theory | AI & Machine Learning |
+-----------+-------------------------------+-----------------+------------+-----------------------+
4 rows in set (0,00 sec)
Te habrás dado cuenta de que hay un error en los datos que acabamos de añadir. La tecnología del curso Manipulación de Datos con pandas es un Python, ni R. Vamos a solucionar el error con la sentencia UPDATE junto con la cláusula WHERE para especificar la fila a actualizar
UPDATE courses SET technology = 'Python' WHERE course_id = 3;
SELECT * FROM courses;
+-----------+-------------------------------+-----------------+------------+-----------------------+
| course_id | course_name | instructor_name | technology | topic |
+-----------+-------------------------------+-----------------+------------+-----------------------+
| 1 | Introduction to SQL | Izzy Weber | SQL | Data Manipulation |
| 2 | Database Design | Lis Sulmont | SQL | Data Engineering |
| 3 | Data Manipulation with pandas | Richie Cotton | Python | Programming |
| 4 | Generative AI Concepts | Daniel Tedesco | Theory | AI & Machine Learning |
+-----------+-------------------------------+-----------------+------------+-----------------------+
4 rows in set (0,00 sec)
Por último, puede que quieras eliminar uno de los registros de tu tabla. Por ejemplo, eliminemos el curso Conceptos de IA Generativa:
DELETE from courses WHERE course_name = 'Generative AI Concepts';
SELECT * FROM courses;
+-----------+-------------------------------+-----------------+------------+-------------------+
| course_id | course_name | instructor_name | technology | topic |
+-----------+-------------------------------+-----------------+------------+-------------------+
| 1 | Introduction to SQL | Izzy Weber | SQL | Data Manipulation |
| 2 | Database Design | Lis Sulmont | SQL | Data Engineering |
| 3 | Data Manipulation with pandas | Richie Cotton | Python | Programming |
+-----------+-------------------------------+-----------------+------------+-------------------+
3 rows in set (0,00 sec)
Temas avanzados
Indexación
Por defecto, cuando MySQL tiene que encontrar unas filas, empezará por la primera y luego leerá de la cabeza a la cola. Este comportamiento puede ser problemático cuando tus bases de datos tienen millones de filas, ya que el proceso puede ser muy lento.
Una buena forma de acelerar la forma en que MySQL busca filas en tus tablas es creando un índice. Un índice de un componente de tus tablas que MySQL utiliza para recuperar filas con columnas específicas más rápidamente.
Vamos a crear un índice en nuestra tabla de cursos llamado "idx_curso" sobre la columna "course_id".
CREATE INDEX idx_course
ON courses (course_id);
Únete a
Hasta ahora, sólo hemos trabajado con la tabla de cursos. Pero sólo empiezas a aprovechar todo el potencial de las bases de datos relacionales, como MySQL, cuando trabajas con varias tablas a la vez.
La herramienta mágica para combinar varias tablas es la operación JOIN. Imagina que tenemos una segunda tabla en nuestra base de datos llamada "instructores" que contiene información básica sobre los instructores de los cursos DataCamp. El siguiente script crea la tabla y añade algunas filas (ficticias):
mysql> CREATE TABLE instructors (
instructor_id int NOT NULL,
instructor_name varchar(250) NOT NULL,
role varchar(500) NOT NULL,
number_courses int NOT NULL,
PRIMARY KEY (instructor_id)
);
INSERT INTO
instructors (instructor_id, instructor_name, role, number_courses) VALUES
(1, 'Lis Sulmont', 'Data Scientist', 4),
(2, 'Daniel Tedesco', 'Business Analyst', 1),
(3, 'Richie Cotton', 'Data Evangelist',5),
(4, 'Izzy Weber', 'Data Engineer', 2),
(5, 'James Chapman', 'Data Analyst',3);
Imagina que quieres fusionar las dos tablas para obtener la información de los cursos, así como los datos asociados al instructor. Utilizaremos un INNER JOIN para obtener sólo la información de los cursos que aparecen en la tabla de cursos. La columna común para hacer la unión es "nombre_instructor".
mysql> SELECT * FROM courses
-> INNER JOIN instructors
-> ON courses.instructor_name = instructors.instructor_name;
+-----------+-------------------------------+-----------------+------------+-------------------+---------------+-----------------+-----------------+----------------+
| course_id | course_name | instructor_name | technology | topic | instructor_id | instructor_name | role | number_courses |
+-----------+-------------------------------+-----------------+------------+-------------------+---------------+-----------------+-----------------+----------------+
| 2 | Database Design | Lis Sulmont | SQL | Data Engineering | 1 | Lis Sulmont | Data Scientist | 4 |
| 3 | Data Manipulation with pandas | Richie Cotton | Python | Programming | 3 | Richie Cotton | Data Evangelist | 5 |
| 1 | Introduction to SQL | Izzy Weber | SQL | Data Manipulation | 4 | Izzy Weber | Data Engineer | 2 |
+-----------+-------------------------------+-----------------+------------+-------------------+---------------+-----------------+-----------------+----------------+
3 rows in set (0,00 sec)
Éste es sólo un tipo de unión, pero hay otros igualmente útiles en función de tu caso de uso. Nuestro Curso de Unir datos en SQL y la hoja de trucos sobre JOINS te ayudarán a empezar.
Buenas prácticas de MySQL
Medidas de seguridad
Las bases de datos modernas pueden almacenar tablas con millones de filas. Con tantos datos y aplicaciones basados en ellos, mantenerlos seguros es vital.
Las bases de datos están sujetas a riesgos comunes, como la mala gestión del acceso a la base de datos, las contraseñas débiles y las inyecciones SQL. Para hacer frente a estas amenazas y debilidades, se pueden aplicar una serie de estrategias y medidas, como configurar los privilegios de acceso en función del usuario, crear desencadenadores en los servidores SQL e implantar metodologías de encriptación. Un buen lugar para iniciarse en la seguridad SQL es nuestro Curso de Diseño de Bases de Datos.
Optimización del rendimiento
A medida que avances en tu viaje de codificación SQL, empezarás a darte cuenta de la importancia del rendimiento. Una consulta SQL puede escribirse de distintas formas. Todas funcionan, pero algunas son más eficaces que otras.
Hay muchas estrategias y trucos que pueden ayudarte a mejorar el rendimiento de tu código SQL, incluidas las subconsultas y las cláusulas SQL, como WHERE, HAVING y DISTINCT.
Pero la eficacia no es sólo una cuestión técnica, sino también de orden y legibilidad. Con pequeños cambios en tu forma de escribir SQL, como el uso de alias y comentarios, puedes marcar una gran diferencia que te ayudará a ti y al resto de tu equipo.
¿Dispuesto a aprender más sobre la optimización del rendimiento de SQL? Consulta nuestro curso Mejorar el rendimiento de las consultas en SQL Server
Conclusión
Enhorabuena por haber llegado al final de este tutorial de MySQL. Esperamos que te haya gustado esta introducción a MySQL y sus capacidades. Si te interesa la gestión de bases de datos, aprender MySQL es una decisión inteligente.
Pero esto es sólo el principio de tu viaje. Si quieres aprender más sobre MySQL y SQL en general, Datacamp te lo pone fácil. Aquí tienes algunos recursos que te ayudarán a empezar:
Conviértete en Ingeniero de Datos
Soy analista de datos autónomo y colaboro con empresas y organizaciones de todo el mundo en proyectos de ciencia de datos. También soy instructor de ciencia de datos con más de 2 años de experiencia. Escribo regularmente artículos relacionados con la ciencia de datos en inglés y español, algunos de los cuales se han publicado en sitios web consolidados como DataCamp, Towards Data Science y Analytics Vidhya Como científico de datos con formación en ciencias políticas y derecho, mi objetivo es trabajar en la interacción de las políticas públicas, el derecho y la tecnología, aprovechando el poder de las ideas para promover soluciones y narrativas innovadoras que puedan ayudarnos a abordar retos urgentes, como la crisis climática. Me considero autodidacta, aprendiz constante y firme partidaria de la multidisciplinariedad. Nunca es demasiado tarde para aprender cosas nuevas.
¡Comienza hoy tu viaje SQL!
Course
SQL intermedio
Course