La restricción PRIMARY KEY en SQL se utiliza para identificar de forma única cada fila de una tabla.
Es uno de los conceptos más importantes en diseño de bases de datos porque garantiza que no existan duplicados ni valores nulos en la columna (o conjunto de columnas) que actúa como clave primaria.
👉 Una tabla puede tener solo una clave primaria.
👉 Puede estar formada por una o varias columnas (clave primaria compuesta).
Sintaxis básica de PRIMARY KEY
Existen dos formas principales de definir una clave primaria:
1) En la creación de la tabla (columna única)
CREATE TABLE clientes (
id INT PRIMARY KEY,
nombre VARCHAR(100),
email VARCHAR(100)
);
👉 Aquí id
es la clave primaria de la tabla (ver más sobre CREATE TABLE)
2) En la creación de la tabla (clave compuesta)
CREATE TABLE pedidos (
pedido_id INT,
producto_id INT,
cantidad INT,
PRIMARY KEY (pedido_id, producto_id)
);
👉 En este caso, la clave primaria está formada por dos columnas.
Características de PRIMARY KEY
- Unicidad → no puede haber dos filas con el mismo valor en la clave primaria.
- No admite NULL → todas las filas deben tener un valor válido.
- Índice automático → la mayoría de los SGBD crean un índice automáticamente sobre la clave primaria.
- Una por tabla → cada tabla solo puede tener una clave primaria, aunque puede estar compuesta por varias columnas.
Ejemplo básico de PRIMARY KEY
CREATE TABLE empleados (
id INT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
puesto VARCHAR(50),
salario DECIMAL(10,2)
);
👉 Aquí id
identifica de forma única a cada empleado.
Ejemplo de PRIMARY KEY compuesta
En una tabla de inscripciones a cursos, un estudiante puede inscribirse a varios cursos, y cada curso tiene varios estudiantes.
CREATE TABLE inscripciones (
estudiante_id INT,
curso_id INT,
fecha DATE,
PRIMARY KEY (estudiante_id, curso_id)
);
👉 No puede haber dos filas con el mismo estudiante en el mismo curso.
ALTER TABLE para agregar PRIMARY KEY
Podemos añadir una clave primaria a una tabla ya existente:
ALTER TABLE clientes
ADD CONSTRAINT pk_clientes PRIMARY KEY (id);
👉 Para más detalles, mirá el uso de ALTER TABLE y restricciones.
Para eliminarla:
ALTER TABLE clientes
DROP CONSTRAINT pk_clientes;
(la sintaxis exacta varía según el motor de base de datos).
Ejemplo práctico: pedidos únicos
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT NOT NULL,
fecha DATE NOT NULL,
total DECIMAL(10,2) NOT NULL
);
id
identifica cada pedido.- No puede haber dos pedidos con el mismo
id
. - Todos los pedidos deben tener un
id
válido.
Diferencias entre PRIMARY KEY y otras restricciones
- PRIMARY KEY vs UNIQUE
- Ambos evitan duplicados.
- La clave primaria no admite
NULL
y solo puede haber una por tabla. - Puede haber múltiples restricciones
UNIQUE
en una tabla.
- PRIMARY KEY vs FOREIGN KEY
PRIMARY KEY
: identifica de manera única cada fila en una tabla.FOREIGN KEY
: crea una relación con la clave primaria de otra tabla.
- PRIMARY KEY vs NOT NULL
NOT NULL
solo asegura que no falte valor.PRIMARY KEY
asegura unicidad + no nulos.
PRIMARY KEY y AUTO_INCREMENT
En motores como MySQL, es común usar AUTO_INCREMENT junto a la clave primaria (ver CREATE TABLE).
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100)
);
👉 Cada nuevo usuario recibe un id
único automáticamente.
En PostgreSQL se usa SERIAL
o GENERATED AS IDENTITY
:
CREATE TABLE usuarios (
id SERIAL PRIMARY KEY,
nombre VARCHAR(100)
);
Errores comunes con PRIMARY KEY
- Definir múltiples claves primarias en la misma tabla
👉 Solo puede existir una. - Permitir nulos en la clave primaria
👉 No está permitido. - Confundir clave primaria con clave candidata
👉 Una tabla puede tener varias columnas candidatas a ser clave, pero solo una se elige comoPRIMARY KEY
. - No definir clave primaria en absoluto
👉 Puede llevar a problemas de integridad y dificultad para relacionar tablas.
Buenas prácticas con PRIMARY KEY
- Usar claves primarias simples (de preferencia un número entero).
- Evitar claves compuestas demasiado grandes, porque complican las relaciones.
- Preferir claves primarias sin significado de negocio (ej. un ID numérico).
- Si se necesita una clave natural (ej. DNI), se puede usar como
UNIQUE
y mantener una clave primaria artificial. - Nombrar las restricciones para mayor claridad (ej.
pk_clientes
). - Entender cómo interactúan con los índices en SQL para mejorar el rendimiento.
Casos de uso de PRIMARY KEY
- Identificación de registros
Ejemplo:id_cliente
en una tabla de clientes. - Relaciones entre tablas
UnaFOREIGN KEY
apunta a laPRIMARY KEY
de otra tabla. - Evitar duplicados
Ejemplo: en una tabla de inscripciones, cada par(estudiante_id, curso_id)
solo puede aparecer una vez.
PRIMARY KEY en distintos motores de base de datos
- MySQL / MariaDB: soporta
PRIMARY KEY
yAUTO_INCREMENT
. - PostgreSQL: soporta
PRIMARY KEY
,SERIAL
yIDENTITY
. - SQL Server: soporta
PRIMARY KEY
con índices clusterizados por defecto. - Oracle: soporta claves primarias y compuestas sin problemas.
👉 Es parte del estándar SQL, pero con detalles propios en cada motor.
Preguntas frecuentes (FAQ)
1. ¿Una tabla puede tener más de una clave primaria?
No. Solo una clave primaria, aunque puede estar compuesta por varias columnas.
2. ¿Una PRIMARY KEY puede ser NULL?
No. Todos sus valores deben ser distintos y no nulos.
3. ¿Qué pasa si intento insertar un valor duplicado en la PRIMARY KEY?
La base de datos rechaza la inserción con un error.
4. ¿Qué diferencia hay entre PRIMARY KEY y UNIQUE?
Ambos evitan duplicados, pero PRIMARY KEY
no permite NULL
y solo puede haber uno por tabla.
5. ¿Es mejor usar un ID artificial o un campo natural como PRIMARY KEY?
Depende. Generalmente es mejor un ID artificial (ej. número entero autoincremental) para mantener simplicidad y flexibilidad.
Conclusión
La PRIMARY KEY en SQL es esencial para garantizar la integridad de los datos:
- Asegura unicidad y evita valores nulos.
- Es fundamental en relaciones entre tablas.
- Se recomienda usar claves simples y sin significado de negocio.
Dominar su uso es básico para cualquier persona que diseñe bases de datos profesionales.
Revisa claves primarias y buenas prácticas en Claves y restricciones y consulta el Glosario SQL completo.