Restricciones NOT NULL y CHECK
Prohíba los valores ausentes con NOT NULL y valide las reglas del dominio con CHECK (price > 0, status IN ('active','archived')).
Restricciones NOT NULL y CHECK es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 1 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.
¿Por qué usar restricciones?
Las restricciones trasladan la validación DENTRO de la base de datos. El beneficio es enorme: toda aplicación, script y consulta ad hoc escribe datos válidos o falla de forma evidente.
NOT NULL
La restricción más sencilla: esta columna debe tener un valor:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL,
age INT -- NULL allowed
);Añadir NOT NULL más adelante
Rellene primero los datos existentes y después añada la restricción:
UPDATE users SET email = 'unknown@example.com' WHERE email IS NULL;
ALTER TABLE users ALTER COLUMN email SET NOT NULL;Restricción CHECK
Una expresión booleana arbitraria que todas las filas deben cumplir:
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
price NUMERIC(10,2) NOT NULL CHECK (price > 0),
discount NUMERIC(5,2) DEFAULT 0 CHECK (discount BETWEEN 0 AND 100)
);CHECK con valores similares a un enum
Restrinja una columna a un conjunto fijo:
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
status TEXT NOT NULL
CHECK (status IN ('pending','paid','shipped','cancelled'))
);NULL supera CHECK silenciosamente
Una restricción CHECK se cumple cuando la expresión es NULL (desconocida). Combínela con NOT NULL cuando necesite una garantía estricta:
CREATE TABLE invoices (
amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);CHECK de varias columnas
Puede hacer referencia a varias columnas:
CREATE TABLE bookings (
start_at TIMESTAMPTZ NOT NULL,
end_at TIMESTAMPTZ NOT NULL,
CHECK (start_at < end_at)
);Añadir CHECK más adelante
Valide primero las filas existentes y después añada la restricción:
ALTER TABLE products
ADD CONSTRAINT positive_price CHECK (price > 0);
-- fails if any row violates itEl truco de NOT VALID para tablas grandes
Omita el análisis completo inicial y valide más adelante en segundo plano:
ALTER TABLE products
ADD CONSTRAINT positive_price CHECK (price > 0) NOT VALID;
ALTER TABLE products VALIDATE CONSTRAINT positive_price;Restricciones con nombre
Asigne siempre un nombre a sus restricciones para que los mensajes de error y las migraciones sean predecibles:
ALTER TABLE products
ADD CONSTRAINT products_price_positive CHECK (price > 0);No replique la lógica en la aplicación
Si la base de datos lo aplica, todas las rutas de código se benefician; ya no existe el "olvidé validar". Mantenga la validación duplicada en la aplicación para mejorar la experiencia de usuario (respuesta inmediata), pero haga de la base de datos la fuente de verdad.
Resumen
NOT NULL y CHECK bloquean los datos incorrectos más habituales.
- NOT NULL: no permite valores faltantes
- CHECK: reglas arbitrarias por fila
- Use NOT VALID + VALIDATE para añadir restricciones en línea
Comprobación rápida
¿Qué ocurre si escribe CHECK (price > 0) en una columna que no tiene NOT NULL?
Preguntas frecuentes
¿La lección «Restricciones NOT NULL y CHECK» es gratis?
Sí — el texto completo de «Restricciones NOT NULL y CHECK» 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 NOT NULL y CHECK»?
Prohíba los valores ausentes con NOT NULL y valide las reglas del dominio con CHECK (price > 0, status IN ('active','archived')). 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 1 de 4.
¿Cuánto tiempo toma la lección «Restricciones NOT NULL y CHECK»?
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