¿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: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
);
- 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
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.