En SQL podemos definir reglas*que controlan qué valores se pueden guardar en las columnas de una tabla. Estas reglas se llaman restricciones (en inglés, constraints).
Sirven para mantener la integridad de los datos y evitar errores como:
- Dos usuarios con el mismo correo electrónico.
- Un campo obligatorio que quedó vacío.
Hasta ahora ya conoces una: PRIMARY KEY. Ahora veremos otras dos igual de importantes: UNIQUE y NOT NULL.
Restricción UNIQUE
UNIQUE garantiza que no haya valores repetidos en una columna.
Por ejemplo, en la tabla de usuarios, dos personas no pueden tener el mismo correo electrónico.
Ejemplo
Creamos una tabla con un campo email que debe ser único:
CREATE TABLE users (
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
username VARCHAR(50),
email VARCHAR(255) UNIQUE,
first_name VARCHAR(50),
last_name VARCHAR(50),
created_at TIMESTAMP
);
Agregamos algunos usuarios:
INSERT INTO users (email, first_name, last_name, username, created_at)
VALUES
('Trevion53@yahoo.com', 'Lucienne', 'Feil', 'Duncan3', '2022-06-14 18:31:05.296'),
('Baylee52@yahoo.com', 'Ramiro', 'Wolf', 'Michaela11', '2022-06-14 02:04:13.104'),
('Casimer_Cronin@yahoo.com', 'Maureen', 'Romaguera', 'Margarete_Hegmann6', '2022-06-14 02:28:26.058');
| id | username | first_name | last_name | created_at | |
|---|---|---|---|---|---|
| 1 | Duncan3 | Trevion53@yahoo.com | Lucienne | Feil | 2022-06-14T18:31:05.296Z |
| 2 | Michaela11 | Baylee52@yahoo.com | Ramiro | Wolf | 2022-06-14T02:04:13.104Z |
| 3 | Margarete_Hegmann6 | Casimer_Cronin@yahoo.com | Maureen | Romaguera | 2022-06-14T02:28:26.058Z |
Ver en DB Fiddle
Ahora intentemos insertar un correo repetido:
INSERT INTO users (email, first_name, last_name, username)
VALUES ('Casimer_Cronin@yahoo.com', 'Caleigh', 'Connelly', 'Curtis_Baumbach');
💥 Resultado:
Query Error: error: duplicate key value violates unique constraint "users_email_key"
👉 La base de datos no permite guardar el registro, porque el correo ya existía.
Ver en DB Fiddle
Restricción NOT NULL
NOT NULL significa literalmente “no puede ser nulo”, es decir: el campo no puede quedar vacío.
Por ejemplo, un usuario debe tener un nombre de usuario.
Ejemplo
Creamos la tabla con username obligatorio:
CREATE TABLE users (
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
username VARCHAR(50) NOT NULL,
email VARCHAR(255) UNIQUE,
first_name VARCHAR(50),
last_name VARCHAR(50),
created_at TIMESTAMP
);
Agregamos algunos registros válidos:
INSERT INTO users (username, email, first_name, last_name, created_at)
VALUES
('Duncan3', 'Trevion53@yahoo.com', 'Lucienne', 'Feil', '2022-06-14 18:31:05.296'),
('Michaela11', 'Baylee52@yahoo.com', 'Ramiro', 'Wolf', '2022-06-14 02:04:13.104');
Pero si intentamos insertar un usuario sin username:
INSERT INTO users (username, email, first_name, last_name, created_at)
VALUES
(NULL, 'angelita@hotmail.com', 'Caleigh', 'Connelly', '2022-06-14 02:28:26.058');
💥 Resultado:
ERROR: null value in column "username" violates not-null constraint
👉 La base de datos exige que username tenga un valor.
Ver en DB Fiddle
Varias restricciones a la vez
Podemos combinar varias restricciones en una misma columna. Por ejemplo, una tabla users bien diseñada podría tener:
CREATE TABLE users (
id bigint PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
username VARCHAR(50) UNIQUE NOT NULL,
birthday DATE,
email_confirmed BOOLEAN,
email VARCHAR(255) UNIQUE NOT NULL,
gender VARCHAR(255) NOT NULL,
password_digest VARCHAR(255) NOT NULL,
first_name VARCHAR(50),
last_name VARCHAR(50),
created_at TIMESTAMP NOT NULL
);
🔹 username — debe ser único y no puede estar vacío.
🔹 email — también único y obligatorio.
🔹 password_digest — no puede ser nulo (cada usuario debe tener contraseña).
🔹 created_at — la fecha debe existir para cada registro.
Ver en DB Fiddle
Resumen
UNIQUE— impide valores repetidos en una columna.NOT NULL— obliga a que el campo tenga un valor.- Puedes combinarlas:
UNIQUE NOT NULLgarantiza que el valor sea único y obligatorio.
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.