Estructura · integridad de datos

CHECK

CHECK impide guardar una fila cuando una expresión de validación resulta falsa.

Lectura: 5–7 minEjemplo comprobadoPráctica con pistas
Contenido de esta guía

Qué protege una restricción CHECK

CHECK coloca una regla junto a la estructura de la tabla. Cada inserción o modificación debe respetarla, sin depender de que todas las aplicaciones recuerden validar el dato.

Es apropiada para condiciones que una fila puede comprobar por sí misma: cantidades positivas, porcentajes entre 0 y 100 o una fecha final posterior a la inicial.

Dos formas de declararla

SQL
CREATE TABLE cupones (
  id INTEGER PRIMARY KEY,
  descuento INTEGER CHECK (descuento BETWEEN 0 AND 100)
);

CREATE TABLE periodos (
  inicio DATE,
  fin DATE,
  CONSTRAINT fin_posterior CHECK (fin >= inicio)
);

Una restricción con nombre facilita identificar el error y modificar el esquema. La sintaxis concreta para añadir o eliminar restricciones después de crear la tabla varía entre motores.

Ejemplo guiado

La tabla de cupones acepta un descuento del 20 %, pero rechaza 140 porque supera el máximo:

SQL
INSERT INTO cupones (id, descuento) VALUES (1, 20);
SELECT id, descuento FROM cupones;

-- Esta sentencia falla:
INSERT INTO cupones (id, descuento) VALUES (2, 140);
Fila válida
iddescuento
120

SQLite devuelve un error de restricción CHECK para la segunda inserción. La fila inválida no se guarda.

CHECK y los valores NULL

En los motores habituales, CHECK bloquea una fila cuando la expresión es falsa; una expresión desconocida por NULL puede no bloquearla. Si la columna también debe ser obligatoria, combina la regla con NOT NULL.

CHECK no sustituye todas las relaciones. Para garantizar que un valor existe en otra tabla utiliza una FOREIGN KEY, no una subconsulta dentro de CHECK.

Error frecuente

Duplicar una regla compleja en muchas tablas

Una restricción debe ser clara, estable y comprobable con la fila actual. Cuando la regla depende de procesos, históricos o varias tablas, quizá necesites otro diseño o lógica transaccional.

Comprueba lo aprendido

Intermedia · restricción

Crea una escala de valoración

Escribe una tabla valoraciones con id como clave primaria y puntuacion obligatoria entre 1 y 5. Después consulta su definición en SQLite.

Compatibilidad entre motores

CHECK forma parte del SQL relacional habitual, pero existen diferencias históricas y de sintaxis al modificar restricciones. Verifica también las funciones permitidas dentro de la expresión. En PostgreSQL, por ejemplo, una CHECK no debe depender de datos de otras filas o tablas.

Qué debes recordar

  • CHECK impide filas que hacen falsa una regla.
  • Combínala con NOT NULL cuando el dato sea obligatorio.
  • Da nombre a las restricciones importantes.
  • Usa claves foráneas para relaciones entre tablas.

Conceptos relacionados

Fuentes técnicas

La explicación se ha contrastado con documentación oficial: