Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Restricciones principales de los campos Fundamentos de SQL

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

Restricción UNIQUE

La restricción 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 email 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 NULL garantiza 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.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY