PRIMARY KEY en SQL
La restricción
PRIMARY KEY
(clave primaria) en SQL es el identificador único de cada fila
en una tabla. Piensa en ella como el «DNI» del registro: no se repite y no puede quedar vacío.
Sin una clave primaria clara es difícil actualizar la fila correcta, enlazar tablas con FOREIGN KEY o hacer JOIN de forma fiable. Por eso casi todas las tablas de una base de datos bien diseñada tienen una.
¿Para qué sirve PRIMARY KEY?
-
Identificar cada fila sin ambigüedad.
Con
WHERE ID_Cliente = 4sabes exactamente qué registro tocar. - Evitar duplicados «fantasma». Dos filas con el mismo identificador romperían la lógica del negocio.
- Ser el punto de anclaje de otras tablas. Las claves foráneas apuntan a la PRIMARY KEY de la tabla padre.
- Mejorar el rendimiento. El motor suele indexar la clave primaria automáticamente para búsquedas rápidas.
Reglas de PRIMARY KEY
| Regla | Significado |
|---|---|
| Unicidad | No puede haber dos filas con el mismo valor de clave primaria. |
| NOT NULL | La columna (o columnas) de la PK no admite NULL. |
| Una por tabla | Cada tabla tiene como máximo una clave primaria. |
| Estable en el tiempo | Lo ideal es que el valor de la PK no cambie (por eso se usan IDs numéricos). |
PRIMARY KEY frente a UNIQUE
Ambas evitan duplicados, pero no son lo mismo:
| PRIMARY KEY | UNIQUE | |
|---|---|---|
| ¿Cuántas por tabla? | Una sola | Varias columnas UNIQUE |
| ¿Admite NULL? | No | Sí (según motor; a menudo una fila con NULL) |
| Uso típico | Identificar la fila | Email, DNI, código de país sin repetir |
En la lección
UNIQUE
verás el caso del código de país (
'ES'
,
'FR'
) que no se repite, pero la fila se identifica por
ID_Pais
.
Sintaxis PRIMARY KEY en CREATE TABLE
Plantilla
CREATE TABLE tabla (
id TIPO PRIMARY KEY,
columna2 TIPO
);
PRIMARY KEY simple en SQL
Creamos la tabla
Paises
con
ID_Pais
como clave primaria.
Codigo
es
UNIQUE
(no se repite) pero no es la PK:
Clave primaria simple
CREATE TABLE Paises (
ID_Pais INTEGER PRIMARY KEY,
Nombre TEXT NOT NULL,
Codigo TEXT UNIQUE
);
INSERT INTO Paises (ID_Pais, Nombre, Codigo)
VALUES (1, 'España', 'ES'), (2, 'Francia', 'FR');
SELECT * FROM Paises ORDER BY Nombre;
Resultado:
dos países con IDs distintos 1 y 2. Si intentaras insertar otra fila con
ID_Pais = 1
, SQLite devolvería error de clave duplicada.
| ID_Pais | Nombre | Codigo |
|---|---|---|
| 2 | Francia | FR |
| 1 | España | ES |
PRIMARY KEY compuesta en SQL
A veces una sola columna no basta para identificar la fila. En líneas de pedido, la combinación pedido + producto es única: el mismo producto puede repetirse en otro pedido, pero no dos veces en el mismo.
Ahí usamos una clave primaria compuesta con varias columnas:
PRIMARY KEY (col1, col2)
CREATE TABLE Items_Pedido (
ID_Pedido INTEGER NOT NULL,
ID_Producto INTEGER NOT NULL,
Cantidad INTEGER NOT NULL,
PRIMARY KEY (ID_Pedido, ID_Producto)
);
INSERT INTO Items_Pedido VALUES (1, 3, 10), (1, 5, 2);
SELECT * FROM Items_Pedido ORDER BY ID_Producto;
Resultado: el par (1, 3) y el par (1, 5) son válidos; el par (1, 3) no podría insertarse dos veces.
| ID_Pedido | ID_Producto | Cantidad |
|---|---|---|
| 1 | 3 | 10 |
| 1 | 5 | 2 |
PRIMARY KEY en la base demo
En nuestro editor, las tablas principales ya siguen este patrón:
- Clientes.ID_Cliente — identifica a cada cliente (1 = Ana García, 4 = Carlos Ruiz…).
- Productos.ID_Producto — identifica cada artículo del catálogo.
- Pedidos.ID_Pedido — identifica cada pedido.
La columna
Pedidos.ID_Cliente
no
es clave primaria de
Pedidos
(puede repetirse si un cliente hace varios pedidos), pero sí enlaza con la PK de
Clientes
mediante
FOREIGN KEY
.
| ID_Cliente | Nombre_Cliente | Ciudad | Pais |
|---|---|---|---|
| 1 | Ana García | Madrid | España |
| 2 | Luis Pérez | Barcelona | España |
| 3 | María López | Valencia | España |
| 4 | Carlos Ruiz | Madrid | España |
| 6 | John Smith | London | UK |
| … 5 clientes más en la demo (10 en total) | |||
Tabla Pedidos (demo)
| ID_Pedido | ID_Cliente | ID_Empleado | Fecha |
|---|---|---|---|
| 1 | 1 | 1 | 2024-01-15 |
| 2 | 3 | 2 | 2024-01-18 |
| 3 | 5 | 1 | 2024-02-02 |
| 4 | 2 | 3 | 2024-02-10 |
| 5 | 6 | 4 | 2024-02-14 |
Resumen PRIMARY KEY
-
PRIMARY KEYidentifica cada fila de forma única y obligatoria. - Puede ser una columna (simple) o varias (compuesta).
- No permite NULL ni duplicados; una sola PK por tabla.
-
Es la base de las relaciones entre tablas y de los
JOIN. - Siguiente paso: FOREIGN KEY para conectar tablas padre e hija.
Comprueba lo aprendido
Responde 2–3 preguntas sobre esta lección. Verás ✓ en verde si aciertas o ✗ en rojo si fallas.