La gestión eficiente de bases de datos es una habilidad fundamental para cualquier profesional de la tecnología. MySQL, como uno de los sistemas de gestión de bases de datos más populares, ofrece herramientas poderosas que van más allá de las consultas básicas. En este contenido, exploraremos cómo crear y poblar una base de datos desde cero, utilizando técnicas que optimizan tanto el desarrollo como el rendimiento, preparándonos para implementar prácticas avanzadas que transformarán nuestra forma de trabajar con datos.
¿Cómo crear y configurar nuestra base de datos desde cero?
Comenzaremos creando una nueva base de datos para este curso. A diferencia del curso anterior que era más básico y enfocado en SQL como tal, este se centrará en buenas prácticas y funcionalidades avanzadas de MySQL.
Para crear nuestra base de datos, utilizaremos comandos tanto desde la terminal de MySQL como desde la línea de comandos del sistema operativo:
El comando CREATE DATABASE IF NOT EXISTS es particularmente útil porque evita errores cuando intentamos crear una base de datos que ya existe. Si ejecutamos este comando sin la cláusula IF NOT EXISTS y la base de datos ya existe, MySQL nos mostrará un error: "Error at line 1: Can't create database; database exists".
Desde la línea de comandos del sistema operativo, podemos ejecutar scripts SQL utilizando:
mysql -u root < esquema.sql
Este comando abre una conexión a MySQL con el usuario root, ejecuta el contenido del archivo esquema.sql y cierra automáticamente la conexión cuando termina.
¿Cómo poblar nuestra base de datos con datos iniciales?
Una vez creada la estructura de la base de datos, necesitamos poblarla con datos para poder trabajar. Para esto, utilizaremos archivos SQL que contienen instrucciones INSERT.
Análisis de los archivos de datos
Antes de importar los datos, es útil analizar los archivos para entender su estructura y tamaño:
wc -l *
Este comando nos muestra el número de líneas en cada archivo:
build_products: 1,000 líneas
builds: 20 líneas
clients: 100,001 líneas
products: 3,000 líneas
Para ver el contenido de un archivo podemos usar:
more products
Los archivos contienen instrucciones INSERT INTO con múltiples valores. Por ejemplo:
Para importar los datos a nuestra base de datos, podemos usar dos enfoques:
Modificar el archivo para incluir la selección de base de datos:
USE platzi_sql;INSERTINTO...
Especificar la base de datos en el comando de importación:
mysql -u root -b platzi_sql < clients.sql
Es importante notar que estamos usando INSERT IGNORE, lo que significa que si hay registros duplicados (por ejemplo, emails que deberían ser únicos), MySQL simplemente los ignorará en lugar de generar un error. Esto explica por qué después de importar, tenemos menos registros de los que había en los archivos originales:
SELECTCOUNT(*)FROM clients;-- Resultado: 98,023 (en lugar de 100,000)
La velocidad de importación es impresionante: MySQL puede procesar archivos de varios megabytes en cuestión de segundos, lo que demuestra su eficiencia para operaciones masivas.
¿Qué son los "súper queries" y por qué son importantes?
El instructor menciona un concepto que llama "súper queries", un término que él mismo acuñó para referirse a consultas que añaden inteligencia no solo a las condiciones WHERE, sino también a las columnas y a las asociaciones con otras tablas.
Estos "súper queries" ofrecen dos ventajas principales:
Desarrollo más rápido: Reducen el tiempo de desarrollo de consultas complejas de "días a horas".
Ejecución más eficiente: Mejoran el rendimiento, reduciendo el tiempo de ejecución significativamente.
El objetivo final es crear bases de datos que sean:
Claras: Fáciles de entender y mantener
Competentes: Capaces de resolver problemas complejos
Eficientes: Tanto para el desarrollo como para el rendimiento en producción
La práctica es fundamental para dominar estas técnicas. Como el instructor enfatiza, la mejor manera de aprender es haciendo los ejercicios por uno mismo, experimentando y cometiendo errores en el proceso.
A lo largo de este curso, iremos modificando las tablas y estructuras para adaptarlas a escenarios de negocio realistas, aprendiendo a optimizar tanto el desarrollo como el rendimiento de nuestras bases de datos.
El camino hacia la maestría en MySQL no solo implica conocer la sintaxis, sino entender cómo estructurar nuestros datos y consultas para obtener el máximo rendimiento con el mínimo esfuerzo. ¿Has experimentado con la importación masiva de datos en MySQL? Comparte tus experiencias y dudas en los comentarios.
Hola! Beco. el curso se ve genial. Yo hice el del 2018 y estuvo bueno. Este por lo que comentas también promete.
Tengo una consulta. Los archivos de curso están en algún apartado o en algún curso previo!? que no los encuentro!?
Desde ya Gracias.
Tengo la misma pregunta donde estan los archivos del curso
déjame reviso con el equipo, por acá contesto en cuanto tenga algo, va?
Si han creado la nueva BD y no tienen las tablas, acá se las paso.
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
gracias
Para enviar un archivo .sql al estándar input de MySQL en Windows, puedes usar la línea de comandos de la siguiente manera:
Abre la terminal de Windows (cmd).
Usa el siguiente comando:
mysql -u root -p < C:\ruta\del\archivo\archivo.sql
Asegúrate de reemplazar C:\ruta\del\archivo\archivo.sql con la ruta real de tu archivo. Esto ejecutará el archivo .sql y cerrará MySQL automáticamente al finalizar.
Que tal, al igual que tu estoy usando la terminal CMD de windows para insertar todos los datos a cada tabla de la DB, pero veo que el profesor utiliza la terminal BASH de linux, aún no entiendo, ya instalé la Shell BASHS para windows (WSL), intenté insertar desde ahí pero no puedo avanzar, al parecer si o si tengo que llevar el curso de terminal y comandos.... saludos
estaría genial si diera el de optimización de sql server, se ve que es un conocedor y sabe explicar, en definitiva lo mejor es ver los errores, porque cuando en el curso todo funciona bien no es muy real al entorno laboral
Hola porfavor en los recursos el archivo schema.sqlcon el que se trabaja en la sesion.
Gracias.
create database if not exists learning_db;use learning_db;create table if not exists clients( client_id int not null primary key auto_increment, name varchar(100) not null, email varchar(100) not null unique, phone_number varchar(20) not null unique, created_at timestamp defaultCURRENT_TIMESTAMP, updated_at timestamp defaultCURRENT_TIMESTAMP on update CURRENT_TIMESTAMP);create table ifNOTEXISTSproducts(`product_id` int not null primary key auto_increment, name varchar(100) not null, sku varchar(100) not null unique, slug varchar(100) not null unique, description text, price float not nulldefault0, created_at timestamp defaultCURRENT_TIMESTAMP, updated_at timestamp defaultCURRENT_TIMESTAMP on update CURRENT_TIMESTAMP);create table ifNOTEXISTSclients( client_id int not null primary key auto_increment, name varchar(100) not null, email varchar(100) not null unique, phone_number varchar(20) not null unique, created_at timestamp defaultCURRENT_TIMESTAMP, updated_at timestamp defaultCURRENT_TIMESTAMP on update CURRENT_TIMESTAMP);create table ifNOTEXISTSbills( bill_id int not null primary key auto_increment, client_id int not null, created_at timestamp defaultCURRENT_TIMESTAMP, updated_at timestamp defaultCURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, foreign key(client_id) references clients(client_id));create table ifNOTEXISTSbill_products( bill_id int not null, product_id int not null, date_added timestamp defaultCURRENT_TIMESTAMP, quantity int not nulldefault1, price float not nulldefault0, discount float not nulldefault0, primary key(bill_id, product_id), foreign key(bill_id) references bills(bill_id), foreign key(product_id) references products(product_id));
Voy a dejar el paso a paso de como deben insertar los datos que dejaron en los recursos de la clase!
1) Crear la bd que vamos a manejar en mysql!
2) creamos las tablas que vamos a utilizar, son las siguientes:
CREATETABLEIFNOTEXISTSclients( client_id INTEGERUNSIGNEDPRIMARYKEYAUTO_INCREMENT, name VARCHAR(100)NOTNULL, email VARCHAR(100)NOTNULLUNIQUE, phone_number VARCHAR(15), created_at TIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMP, updated_at TIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP);CREATETABLEIFNOTEXISTSproducts( product_id INTEGERUNSIGNEDPRIMARYKEYAUTO_INCREMENT, sku VARCHAR(20)NOTNULLUNIQUE, name VARCHAR(100)NOTNULL, slug VARCHAR(200)NOTNULLUNIQUE, description TEXT, price FLOATNOTNULLDEFAULT0, created_at TIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMP, updated_at TIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP);CREATETABLEIFNOTEXISTSbills( bill_id INTEGERUNSIGNEDPRIMARYKEYAUTO_INCREMENT, client_id INTEGERNOTNULL, total FLOAT, status ENUM('open','paid','lost')NOTNULLDEFAULT'open', created_at TIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMP, updated_at TIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP);CREATETABLEIFNOTEXISTSbill_products( bill_product_id INTEGERUNSIGNEDPRIMARYKEYAUTO_INCREMENT, bill_id INTEGERUNSIGNEDNOTNULL, product_id INTEGERUNSIGNEDNOTNULL, date_added DATETIME, quantity INTEGERDEFAULT1, price FLOATNOTNULL, discount INTEGERNOTNULLDEFAULT0, created_at TIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMP, updated_at TIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP);```3) Abrimos nuestra terminal de preferencia y nos ubicamos en la carpeta donde esta nuestro mysql, por lo general siempre esta en:
```js
C:\ProgramFiles\MySQL\MySQLServer8.0```4) ya teniendo descargado el archivo de la clase que se llama "data-2.zip" lo que hacemos desde la terminal es conectarnos a nuestra bd e insertamos el archivo.
```js
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe"-u root -p -D platziavanzando <"ruta_donde_esta_los_archivos\data\products.sql"```ahí les va a solicita la contraseña, la escriben y listo ya se inserto los datos de los archivos de la clase
:)
Ojalá todos los cursos de Platzi tuvieran la misma profundidad y profesionalismo que los cursos que dicta Beco, excelente <3
Funciona igual si no se agrega -B para escribir el nombre de la base de datos
mysql -u root platzisql < products.sql
El profesor utiliza una combinación de herramientas clásicas que son el pan de cada día en el mundo de los datos:
Terminal (Línea de comandos): Es su centro de operaciones para interactuar con el sistema operativo y ejecutar scripts de SQL de forma masiva sin depender de interfaces gráficas.
MySQL (Cliente de línea de comandos): La herramienta nativa para comunicarse con el servidor de base de datos.
Editor de texto (Atom): Lo usa para inspeccionar y manipular archivos .sql (como los esquemas y los datos) antes de enviarlos a la base de datos.
Comandos de sistema (Linux/Unix): Utiliza utilidades como ls, pwd, more, y wc -l para gestionar archivos y verificar el volumen de datos.
Es un flujo de trabajo limpio y eficiente. ¿Ves por qué prefiere la terminal sobre una interfaz gráfica para manejar archivos de miles de líneas?
como se llama la consola que estas usando ?
Me gustaría saber si existe algún curso de SQL Server.
Desde Microsoft SQL Server Management Studio hay varias funcionalidades que me gustaría aprender a utilizar, como por ejemplo SQL Server Profiler.
Siendo totalmente sincero, los cursos que he tomado en Platzi no han sido de mi agrado.
Con powerShell se usa el comando
Get-Content.\clients.sql| mysql -u root -p course
Hola, David. El archivo schema.sql y los datos están en el archivo comprimido "data-2.zip", que puedes descargar de los recursos de la clase. El profesor lo usa para crear la base de datos y sus tablas.
Hola David, yo no lo encuentro. Veo dos carpetas (Data y _MACOSX) y dentro de esas dos carpetas hay más archivos, pero ninguno con el nombre schema.sql
Por alguna razón si me importa todos los datos de clients.sql sin necesidad de agregarle use platzisql; al inicio del archivo, se lo importa directamente a la tabla en la base de datos.
Que puede estar pasando estoy usando MAC con MySQL instalado desde Homebrew.