Relaciones · identidad de filas

PRIMARY KEY

Declara la columna —o combinación de columnas— que identifica de forma única cada fila de una tabla.

Lectura: 6–8 minEjemplo comprobadoPráctica con pistas
Contenido de esta guía

Qué garantiza una clave primaria

Una restricción PRIMARY KEY indica qué dato permite distinguir una fila de todas las demás. En SQL estándar, la combinación elegida debe ser única y no puede contener NULL.

Una tabla solo tiene una clave primaria, aunque esa clave puede estar formada por varias columnas. Esto no impide crear otras restricciones UNIQUE para datos que también deban evitar duplicados.

Dos formas de declararla

Una columna
CREATE TABLE clientes_demo (
  id INTEGER PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL
);

Cuando la clave utiliza una sola columna, puede escribirse junto a su definición.

Clave compuesta
CREATE TABLE inscripciones_demo (
  curso_id INTEGER NOT NULL,
  alumno_id INTEGER NOT NULL,
  fecha TEXT NOT NULL,
  PRIMARY KEY (curso_id, alumno_id)
);

La segunda tabla impide repetir la misma pareja curso_id–alumno_id, pero permite que un curso tenga muchos alumnos y que un alumno participe en varios cursos.

Ejemplo guiado

Insertar y consultar
INSERT INTO clientes_demo (id, nombre)
VALUES (1, 'Ana'), (2, 'Luis');

SELECT id, nombre
FROM clientes_demo
ORDER BY id;
Resultado comprobado en SQLite
idnombre
1Ana
2Luis

El identificador sirve para localizar una fila sin depender de datos que pueden cambiar, como el nombre o el correo electrónico.

La clave primaria no tiene que ser visible para el usuario. Su función es dar identidad estable a la fila y permitir que otras tablas la referencien mediante una clave foránea.

Error frecuente

Elegir un dato cambiante como identificador

Usar un nombre, teléfono o dirección como clave suele crear problemas cuando el dato cambia o no es realmente único. También debes evitar generar identificadores con MAX(id) + 1: dos operaciones simultáneas podrían calcular el mismo valor.

Duplicado rechazado
INSERT INTO clientes_demo (id, nombre)
VALUES (1, 'Marta');

Esta inserción falla porque el valor 1 ya identifica a Ana.

Comprueba lo aprendido

Básica · diseño de tablas

Evita matrículas repetidas

Crea una tabla matriculas con curso_id, estudiante_id y fecha. La misma persona no debe matricularse dos veces en el mismo curso, pero sí en cursos distintos.

Compatibilidad entre motores

La restricción es común a los principales motores. Lo que cambia es la forma de generar automáticamente sus valores: identidades, secuencias, AUTO_INCREMENT y el comportamiento especial de INTEGER PRIMARY KEY en SQLite no son una única sintaxis portable.

SQLite conserva una excepción histórica: una clave primaria que no sea INTEGER PRIMARY KEY puede admitir NULL si la tabla no es STRICT ni WITHOUT ROWID y la columna no declara NOT NULL. Por eso los ejemplos de claves compuestas declaran cada columna como NOT NULL de forma explícita. Define primero la regla de identidad y después adapta tanto la restricción como la generación al motor.

Qué debes recordar

  • En SQL estándar, una clave primaria combina unicidad y ausencia de NULL.
  • Solo hay una por tabla, pero puede incluir varias columnas.
  • Debe identificar la fila de forma estable.
  • SQLite conserva una excepción histórica; declara NOT NULL explícitamente cuando no uses INTEGER PRIMARY KEY, una tabla STRICT o WITHOUT ROWID.
  • La generación automática del valor cambia entre motores.

Conceptos relacionados

Fuentes técnicas consultadas