Restricciones UNIQUE y claves compuestas
Imponga la unicidad en una o varias columnas, comprenda los NULL en los índices únicos y use la unicidad compuesta para las claves naturales.
Restricciones UNIQUE y claves compuestas es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
UNIQUE: no se permiten duplicados
Una restricción UNIQUE impide que dos filas compartan el mismo valor en las columnas restringidas:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(50) UNIQUE
);UNIQUE crea un índice
Una restricción UNIQUE se implementa mediante un índice B-tree único, por lo que las búsquedas por esa columna son rápidas.
-- This shows the implicit index:
SELECT indexname FROM pg_indexes WHERE tablename = 'users';UNIQUE compuesto
Unicidad en una combinación de columnas:
CREATE TABLE memberships (
user_id BIGINT NOT NULL,
group_id BIGINT NOT NULL,
role TEXT NOT NULL,
UNIQUE (user_id, group_id) -- a user can be in a group at most once
);UNIQUE frente a PRIMARY KEY
Una clave primaria es, esencialmente, UNIQUE + NOT NULL + una identidad designada. Una tabla puede tener UNA clave primaria, pero muchas restricciones UNIQUE.
NULL en UNIQUE
El estándar SQL considera NULL distinto de cualquier otro valor, incluidos otros NULL. Puede tener varias filas NULL en una columna UNIQUE:
CREATE TABLE invites (email VARCHAR(255) UNIQUE);
INSERT INTO invites VALUES (NULL), (NULL); -- both succeed
-- PostgreSQL 15+ offers UNIQUE NULLS NOT DISTINCT to treat NULL as equal:
CREATE TABLE invites2 (email VARCHAR(255) UNIQUE NULLS NOT DISTINCT);Clave primaria compuesta
Si una clave natural compuesta encaja con el modelo, úsela como PRIMARY KEY:
CREATE TABLE order_items (
order_id BIGINT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
product_id BIGINT NOT NULL REFERENCES products(id),
quantity INT NOT NULL CHECK (quantity > 0),
PRIMARY KEY (order_id, product_id)
);Clave sustituta + clave natural UNIQUE
Un patrón habitual: un id sintético como clave primaria y la unicidad del mundo real mediante UNIQUE:
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
sku VARCHAR(50) NOT NULL UNIQUE,
name TEXT NOT NULL
);Índices UNIQUE parciales
Unicidad únicamente entre algunas filas:
-- One active email per user (deleted users can re-register):
CREATE UNIQUE INDEX users_active_email_idx
ON users (email)
WHERE deleted_at IS NULL;Índices UNIQUE sobre expresiones
Unicidad basada en una expresión calculada; resulta útil para correos electrónicos sin distinción entre mayúsculas y minúsculas:
CREATE UNIQUE INDEX users_email_ci_idx ON users (LOWER(email));Errores de violación de UNIQUE
Una inserción duplicada devuelve:
ERROR: duplicate key value violates unique constraint "users_email_key"
DETAIL: Key (email)=(alice@example.com) already exists.UPSERT se basa en UNIQUE
ON CONFLICT necesita una clave UNIQUE o PRIMARY KEY como objetivo; así es como PostgreSQL sabe qué cuenta como duplicado.
Resumen
UNIQUE es la segunda restricción más importante después de NOT NULL.
- Simple o compuesta
- UNIQUE parcial para "solo entre filas activas"
- UNIQUE sobre expresiones para claves que no distinguen mayúsculas y minúsculas
- Tenga presente la regla de que NULL es distinto
Comprobación rápida
¿Puede una columna UNIQUE contener varios valores NULL en el estándar SQL?
Preguntas frecuentes
¿La lección «Restricciones UNIQUE y claves compuestas» es gratis?
Sí — el texto completo de «Restricciones UNIQUE y claves compuestas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Restricciones UNIQUE y claves compuestas»?
Imponga la unicidad en una o varias columnas, comprenda los NULL en los índices únicos y use la unicidad compuesta para las claves naturales. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Restricciones UNIQUE y claves compuestas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Restricciones NOT NULL y CHECK
- Restricciones UNIQUE y claves compuestas
- FOREIGN KEY y acciones referenciales
- Valores DEFAULT y columnas generadas