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
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.
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
INSERT INTO clientes_demo (id, nombre)
VALUES (1, 'Ana'), (2, 'Luis');
SELECT id, nombre
FROM clientes_demo
ORDER BY id;| id | nombre |
|---|---|
| 1 | Ana |
| 2 | Luis |
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.
INSERT INTO clientes_demo (id, nombre)
VALUES (1, 'Marta');Esta inserción falla porque el valor 1 ya identifica a Ana.
Comprueba lo aprendido
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.
Solución razonada
CREATE TABLE matriculas (
curso_id INTEGER NOT NULL,
estudiante_id INTEGER NOT NULL,
fecha DATE NOT NULL,
PRIMARY KEY (curso_id, estudiante_id)
);La combinación completa debe ser única. Cada columna por separado puede repetirse.
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 NULLexplícitamente cuando no usesINTEGER PRIMARY KEY, una tablaSTRICToWITHOUT ROWID. - La generación automática del valor cambia entre motores.