¿QUÉ ES SON LAS CONSTRAINTS EN MYSQL? GUÍA COMPLETA

Una Constraint, o restricción, es una regla que se aplica a una o varias columnas de una tabla para garantizar que los datos cumplan ciertos criterios de validez. Su objetivo principal es evitar datos incorrectos desde el momento en que se insertan o actualizan, en lugar de tener que validarlos después con código de aplicación.

¿Para qué sirven las Constraints?

  • Evitar datos inválidos o inconsistentes.
  • Mantener la integridad de la base de datos.
  • Proteger la información contra errores humanos o fallos de la aplicación.
  • Aplicar reglas de negocio de forma automática a nivel de base de datos.

Cómo funcionan las Constraints

Cuando se intenta insertar o actualizar un registro, MySQL verifica automáticamente si cumple con todas las restricciones definidas:
  • Si cumple las Constraint: El dato se guarda.
  • Si no cumple las Constraint: La operación es rechazada y se devuelve un error.

Tipos de Constraints en MySQL

MySQL soporta los siguientes tipos principales de restricciones contraints:
Tipo Descripción Ejemplo en MySQL
PRIMARY KEY Identifica de forma única cada registro "id INT PRIMARY KEY"
FOREIGN KEY Enlaza una tabla con otra (integridad referencial) "cliente_id INT, FOREIGN KEY (cliente_id) REFERENCES clientes(id)"
NOT NULL No permite valores nulos "nombre VARCHAR(100) NOT NULL"
UNIQUE Evita valores duplicados "email VARCHAR(100) UNIQUE"
CHECK Valida una condición específica "edad INT CHECK (edad >= 18)"
DEFAULT Asigna un valor por defecto "estado VARCHAR(20) DEFAULT 'activo'"

Ejemplo práctico

CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
edad INT CHECK (edad >= 18),
estado VARCHAR(20) DEFAULT 'activo',
fecha_registro DATETIME DEFAULT CURRENT_TIMESTAMP
);
En esta tabla:
  • No se puede insertar un usuario sin nombre o email.
  • No se pueden duplicar correos electrónicos.
  • La edad debe ser mayor o igual a 18.
  • Si no se especifica el estado, se guarda como 'activo'.

¿Por qué son tan importantes las Constraints?

Sin constraints, la base de datos puede almacenar:
  • Emails duplicados
  • Edades negativas
  • Registros sin datos obligatorios
  • Claves foráneas huérfanas, es decir, datos inconsistentes
Con las constraints, MySQL actúa como un guardián que protege la integridad de los datos.

Ejemplo completo con INSERT

-- Intento fallido (edad < 18)
INSERT INTO usuarios (nombre, email, edad) 
VALUES ('Pedro', 'pedro@email.com', 16);

-- Error: CHECK constraint failed

-- Inserto correcto
INSERT INTO usuarios (nombre, email, edad) 
VALUES ('Ana', 'ana@email.com', 25);

Consejos para MySQL

  • Definir siempre las constraints al crear la tabla.
  • Usar "FOREIGN KEY" para mantener la integridad referencial entre tablas.
  • Combinar "NOT NULL" y "UNIQUE" en campos críticos como email o username.
  • En versiones recientes de MySQL (8.0+), el soporte para "CHECK" es mucho más robusto.