0Pricing
SQL Academy · Lección

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 it

El 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

  1. Restricciones NOT NULL y CHECK
  2. Restricciones UNIQUE y claves compuestas
  3. FOREIGN KEY y acciones referenciales
  4. Valores DEFAULT y columnas generadas
← Volver a SQL Academy