1. Glosario/

CHECK constraint

CHECK constraint

El CHECK constraint es una restricción SQL estándar que limita los valores admitidos en una columna o tabla mediante una expresión booleana. Cuando un INSERT o UPDATE produciría un valor que viola la expresión, la base de datos rechaza la operación.

Cómo funciona #

Se declara a nivel de columna o de tabla en el CREATE TABLE o se añade después con ALTER TABLE ADD CONSTRAINT. La expresión puede ser cualquier condición booleana válida: status IN ('NEW','ACTIVE','CLOSED'), precio > 0, fecha_fin >= fecha_inicio. La restricción se evalúa en cada escritura sobre la columna.

Para qué sirve #

Garantizar la integridad del dato directamente en el schema, sin tener que validar a nivel aplicativo. Particularmente útil para:

  • Limitar un campo a un conjunto de valores (alternativa a ENUM)
  • Restricciones inter-columna (ej. coherencia de fechas, sumas que deben corresponder)
  • Validación de formato básica (ej. emails, códigos fiscales)

Cuándo se usa en MySQL #

Cuidado con la versión: antes de MySQL 8.0.16 los CHECK constraint se parseaban y se ignoraban silenciosamente. Solo desde la 8.0.16 se aplican de verdad. Es algo que ha sorprendido a muchos desarrolladores migrados de PostgreSQL u Oracle, donde los CHECK funcionan desde siempre.

Respecto a ENUM, CHECK es más flexible (renombrar un valor es solo un ALTER CONSTRAINT) pero más verboso. Va bien para conjuntos de 5-15 valores que se tocan de vez en cuando, sin necesidad de atributos adicionales.