Trescientos pedidos en una sola hoja
Pasar una hoja de cálculo a una base de datos es convertir sus filas y columnas en una tabla de SQL. Así los datos dejan de depender de un archivo que cualquiera puede romper.
Imagina la cafetería de tu instituto. Anota los pedidos en una hoja, y tres personas la editan a la vez. Tarde o temprano, alguien borra una fila sin querer.
Al terminar esta lección
Nota
Puedo pasar los datos de una hoja de cálculo a una tabla de una base de datos.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Base de datos | un lugar ordenado donde se guardan datos | |
| Tabla | filas y columnas dentro de una base de datos | |
| Columna | una clase de dato, igual para todas las filas | price |
| Tipo de dato | lo que puede guardar una columna | INT |
| Clave primaria | la columna que distingue cada fila de las demás | |
| SQL | el lenguaje para hablar con una base de datos |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Hoja y tabla: parecidas, pero con reglas
Una hoja deja escribir cualquier cosa en cualquier celda. Una tabla es más estricta. Cada columna guarda una sola clase de dato, y cada fila tiene las mismas columnas.
Esas reglas parecen un fastidio. Pero son las que impiden que alguien escriba la palabra «doce» donde va un número.
Ejemplo resuelto: hoja frente a tabla
| Idea | Hoja de cálculo | Tabla de una base de datos |
|---|---|---|
| Una celda | Puede guardar cualquier cosa | Guarda lo que dice el tipo de su columna |
| Una fila repetida | Se puede copiar sin querer | La clave primaria lo impide |
| Mucha gente a la vez | Se pisan unos a otros | La base ordena los cambios |
| Mucho tamaño | Se vuelve lenta | Está hecha para millones de filas |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cada columna necesita un tipo de dato
Antes de pasar los datos, decide qué tipo tiene cada columna. Los cuatro más usados son estos.
INT guarda números enteros. DECIMAL(5,2) guarda un número con dos decimales, como un precio. VARCHAR(40) guarda texto de hasta 40 letras. DATE guarda una fecha.
Ejemplo resuelto: las columnas de la cafetería
| Columna de la hoja | Ejemplo | Tipo en la tabla | Por qué |
|---|---|---|---|
| id | 1 | INT | Es un número entero que no tiene decimales |
| name | Bocadillo | VARCHAR(40) | Es texto corto |
| price | 2.50 | DECIMAL(5,2) | Es dinero, con dos decimales |
| stock | 12 | INT | Es una cuenta de unidades |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La clave primaria distingue cada fila
Dos productos pueden llamarse igual. Por eso cada fila lleva una clave primaria: un valor que no se repite nunca, casi siempre un número id.
La base rechaza una fila nueva cuya clave ya existe. Así nadie guarda dos veces el mismo producto sin darse cuenta.
Ahora lo harás en el laboratorio. Primero, dos líneas de preparación que ya conoces si has usado la base shop.
Aceptar el certificado del servidor
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un nombre corto para el cliente
alias db='mariadb -h db -u student -pstudent -t -e'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Crear tu propia base
db "CREATE DATABASE IF NOT EXISTS student_club"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
CREATE TABLE da forma a la tabla
CREATE TABLE lleva el nombre de la tabla y, entre paréntesis, una línea por columna: su nombre y su tipo. PRIMARY KEY marca la clave.
NOT NULL obliga a que la columna tenga valor. El primer Run tira una copia antigua, para que puedas repetir la lección cuando quieras.
Tirar una copia antigua
db "DROP TABLE IF EXISTS student_club.snacks"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Crear la tabla snacks
db "CREATE TABLE student_club.snacks (id INT PRIMARY KEY, name VARCHAR(40) NOT NULL, price DECIMAL(5,2) NOT NULL, stock INT NOT NULL)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
INSERT mete las filas de la hoja
INSERT INTO nombra la tabla y sus columnas. VALUES da un paréntesis por cada fila de la hoja, separados por comas.
El texto va entre comillas simples. Los números, sin comillas y con punto decimal. Después, un SELECT * enseña toda la tabla para comprobar que ha llegado todo.
Insertar las cinco filas de la hoja
db "INSERT INTO student_club.snacks (id, name, price, stock) VALUES (1, 'Bocadillo', 2.50, 12), (2, 'Zumo', 1.20, 30), (3, 'Fruta', 0.80, 0), (4, 'Galletas', 1.00, 8), (5, 'Tostada', 1.50, 20)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Comprobar que ha llegado todo
db "SELECT * FROM student_club.snacks ORDER BY id"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que un precio se puede guardar como texto, por ejemplo «2,50 €». No: con texto no puedes sumar ni ordenar por precio. Guarda 2.50 en una columna DECIMAL y pon el símbolo € solo cuando lo muestres.
Repetir la clave 1 a propósito
db "INSERT INTO student_club.snacks (id, name, price, stock) VALUES (1, 'Otro bocadillo', 3.00, 5)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pruébalo: ordenar la tabla
-- Los productos del más barato al más caro.
SELECT name, price FROM snacks
ORDER BY price;
-- Cambia ORDER BY price por ORDER BY stock y ejecútalo otra vez.
Para ir más lejos
La hoja de la cafetería tiene una columna «Caduca» con fechas como 12/03/2026. Escribe qué tipo le darías y cómo tendrías que escribir la fecha dentro de un INSERT.
Explica también por qué la columna name no sirve como clave primaria.