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 = 4 sabes 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;
  
Abrir en editor

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_PaisNombreCodigo
2FranciaFR
1EspañaES

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;
  
Abrir en editor

Resultado: el par (1, 3) y el par (1, 5) son válidos; el par (1, 3) no podría insertarse dos veces.

ID_PedidoID_ProductoCantidad
1310
152

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
1Ana GarcíaMadridEspaña
2Luis PérezBarcelonaEspaña
3María LópezValenciaEspaña
4Carlos RuizMadridEspaña
6John SmithLondonUK
… 5 clientes más en la demo (10 en total)
Tabla Clientes (extracto). Diez clientes; cinco tienen pedidos.

Tabla Pedidos (demo)

ID_Pedido ID_Cliente ID_Empleado Fecha
1112024-01-15
2322024-01-18
3512024-02-02
4232024-02-10
5642024-02-14
Tabla Pedidos en el editor SQL. Cinco pedidos enlazan clientes y empleados.

Resumen PRIMARY KEY

  • PRIMARY KEY identifica 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.