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

Clave primaria y autoincremento Fundamentos de SQL

Hasta ahora escribíamos los identificadores (id) a mano cada vez que agregábamos un registro. Eso funciona para practicar, pero en la vida real nadie hace eso. Las bases de datos pueden crear esos números automáticamente.

¿Qué es una clave primaria?

Imagina que tienes una tabla de usuarios. Cada fila representa a una persona, y cada una necesita un identificador único — una clave primaria.

CREATE TABLE users (
    id BIGINT PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(255),
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    created_at TIMESTAMP
);

💡 La clave primaria (PRIMARY KEY) garantiza que no haya dos filas con el mismo id.

-- Esto dará error porque el id = 1 ya existe
INSERT INTO users (id, username) VALUES (1, 'Ramiro');
INSERT INTO users (id, username) VALUES (1, 'Lucía');

🔵 Abrir en DB Fiddle

Autogeneración del ID

En la práctica, no escribimos los id a mano. La base de datos los crea automáticamente usando un contador interno. Cada vez que insertas un registro, el número sube +1.

CREATE TABLE users (
  id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  username VARCHAR(50),
  email VARCHAR(255),
  created_at TIMESTAMP
);

💡 Ahora el id se genera solo, no hace falta incluirlo en el INSERT. La clave primaria y el autoincremento se suelen usar juntos:

INSERT INTO users (username, email, created_at)
VALUES 
('Lucienne', 'lucienne@example.com', '2022-06-14'),
('Ramiro', 'ramiro@example.com', '2022-06-15');

🔵 Abrir en DB Fiddle

id username email created_at
1 Lucienne lucienne@example.com 2022-06-14
2 Ramiro ramiro@example.com 2022-06-15

💡 Cada nuevo registro recibe un número único. Si eliminas una fila, el contador no retrocede.

¿Qué pasa si borras una fila?

Si eliminas un registro, el contador sigue avanzando. Esto evita que dos filas distintas terminen con el mismo id.

DELETE FROM users WHERE id = 2;
INSERT INTO users (created_at, email, first_name, last_name, username) VALUES
('2022-06-13 22:36:55.322', 'Angelita.Altenwerth96@hotmail.com', 'Jennyfer', 'Flatley', 'Kayley.Turcotte98');

SELECT * FROM users;

🔵 Abrir en DB Fiddle

💡 El id no se reutiliza: aunque borres la fila 2, el siguiente será 3.

Opciones de autoincremento

PostgreSQL permite dos variantes:

Opción Qué hace
GENERATED ALWAYS La base genera el valor y no te deja modificarlo.
GENERATED BY DEFAULT Puedes dejar que la base lo genere o escribirlo tú mismo.

👉 En la mayoría de los casos usamos GENERATED ALWAYS.


Resumen

  • La clave primaria identifica de forma única cada registro.
  • El autoincremento genera los valores del id automáticamente.
  • Así evitas duplicados y errores al insertar datos.
  • La opción más usada es PRIMARY KEY GENERATED ALWAYS AS IDENTITY.
  • El contador nunca se reinicia: cada fila nueva recibe un número único.

Materiales adicionales

  1. PRIMARY KEY / PostgreSQL (en inglés)
  2. GENERATED AS IDENTITY / PostgreSQL (en inglés)

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