¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Tablas y claves

Después de esta lección: Puedo crear tablas con claves en una base de datos relacional.

Lección de 55 min13 comandosLaboratorio de MySQL y phpMyAdmin con una base de datos de una tienda para practicar SQL

Dos clientes con el número 31

Un taller de reparaciones anota sus encargos en una hoja de cálculo. A dos clientes distintos les asignaron el mismo número, el 31.

Ahora el resguardo de uno muestra el teléfono del otro.

Una base de datos evita este error. Rechaza el segundo 31 antes de que haga daño.

Al terminar esta lección

Nota

Puedo crear tablas con claves en una base de datos relacional.

Palabras clave

PalabraQué significaEjemplo
Tablafilas y columnas que guardan una sola clase de cosa
Tipo de datola clase de valor que admite una columnaINT
Clave primariala columna que identifica cada fila, sin repetirseid
Clave foráneauna columna que apunta a una fila de otra tabla; también se llama clave ajenaroute_id
Restricciónuna regla que la base comprueba en cada cambioNOT NULL
NULLla marca de un valor que falta

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una tabla guarda una sola clase de cosa

Una base de datos relacional guarda los datos en tablas. Cada tabla guarda una clase de cosa: clientes, productos o pedidos.

Cada columna tiene un tipo de dato. La base rechaza un texto en una columna de números.

Primero dile al terminal cómo entrar. Estos dos Run sirven para toda la lección.

Aceptar el certificado del servidor

Comando
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

Se 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 la tienda

Comando
alias sql='mariadb -h db -u student -pstudent shop -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.

Mirar las columnas de una tabla

Comando
sql "DESCRIBE reviews"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo resuelto: elegir un tipo

Dato que guardarTipoPor qué
Unidades de un productoINTSolo números enteros
Un precio en eurosDECIMAL(8,2)Céntimos exactos, sin errores de redondeo
El nombre de una ciudadVARCHAR(40)Texto de hasta 40 caracteres
El día de un envíoDATELa base puede calcular los días entre dos fechas
Si está descatalogadoBOOLEANSolo sí o no

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

La clave primaria identifica cada fila

Una clave primaria es una columna cuyo valor es distinto en cada fila. Nunca puede ser NULL.

Suele ser un número que cuenta la propia base, con AUTO_INCREMENT. La base rechaza una segunda fila con la misma clave.

Una clave puede usar dos columnas a la vez. Entonces el par no puede repetirse.

Una clave de dos columnas

Comando
sql "DESCRIBE order_items"

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 nombre o un correo sirve de clave primaria. Los nombres se repiten y los correos cambian. Usa un número que cuente la base. Guarda el correo en una columna UNIQUE aparte.

La clave foránea apunta a otra tabla

Un paquete viaja por una ruta. La tabla de paquetes no copia los datos de la ruta. Guarda su número.

Esa columna es una clave foránea. La base comprueba que ese número exista en la tabla de rutas.

Así no puedes enviar un paquete por una ruta que no existe.

Ahora crea dos tablas propias

El laboratorio te deja crear cualquier base cuyo nombre empiece por student_. Vas a crear student_depot para una pequeña empresa de mensajería.

La base de la tienda queda como estaba. Ejecuta los Run en orden. Un Run que termina en error forma parte de la lección.

Crear tu propia base

Comando
sql "CREATE DATABASE IF NOT EXISTS student_depot"

Se 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 ella

Comando
alias depot='mariadb -h db -u student -pstudent student_depot -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.

Empezar de cero: borrar las dos tablas

Comando
depot "DROP TABLE IF EXISTS parcels, routes"

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 de rutas

Comando
depot "CREATE TABLE routes (id INT AUTO_INCREMENT PRIMARY KEY, town VARCHAR(40) NOT NULL UNIQUE, days INT NOT NULL DEFAULT 1)"

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 de paquetes

Comando
depot "CREATE TABLE parcels (id INT AUTO_INCREMENT PRIMARY KEY, route_id INT NOT NULL, weight_kg DECIMAL(5,2) NOT NULL, sent_on DATE NOT NULL, FOREIGN KEY (route_id) REFERENCES routes(id))"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Añadir dos rutas

Comando
depot "INSERT INTO routes (town, days) VALUES ('Sevilla', 1), ('Bilbao', 2)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Enviar un paquete por la ruta 9

Comando
depot "INSERT INTO parcels (route_id, weight_kg, sent_on) VALUES (9, 2.5, '2026-03-02')"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Añadir Sevilla por segunda vez

Comando
depot "INSERT INTO routes (town) VALUES ('Sevilla')"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Intentar borrar la tabla de rutas

Comando
depot "DROP TABLE routes"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para ir más allá

Dale repartidores a la empresa. Crea en student_depot una tabla drivers con una clave primaria numerada, un nombre y un número de carné UNIQUE.

Después añade a parcels una columna driver_id con ALTER TABLE, y una clave foránea de esa columna a drivers. Demuestra que cada regla funciona con una fila que la incumpla.

Sobre este laboratorio y su código: Laboratorio de MySQL y phpMyAdmin con una base de datos de una tienda para practicar SQL

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.