Crear una secuencia / valor autoincremental
Oracle
-- Sequence
CREATE SEQUENCE customer_seq START WITH 1 INCREMENT BY 1 NOCACHE;
SELECT customer_seq.NEXTVAL FROM dual;
-- or an identity column (12c+)
CREATE TABLE customer (id NUMBER GENERATED ALWAYS AS IDENTITY, name VARCHAR2(100));El método clásico es CREATE SEQUENCE + NEXTVAL/CURRVAL. Desde 12c también se admiten columnas GENERATED AS IDENTITY. Un valor de CACHE mejora el rendimiento, pero pueden producirse huecos.
PostgreSQL
-- Sequence
CREATE SEQUENCE customer_seq START 1 INCREMENT 1;
SELECT nextval('customer_seq');
-- Modern method: identity column
CREATE TABLE customer (id int GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name text);
-- Classic: serial (creates a sequence behind the scenes)
CREATE TABLE logs (id serial PRIMARY KEY, message text);GENERATED ... AS IDENTITY es estándar SQL y la opción recomendada; serial es la abreviatura heredada. Acceda manualmente con nextval/currval. El valor se puede restablecer con setval.
MySQL
-- AUTO_INCREMENT column
CREATE TABLE customer (id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100));
-- Set the starting value
ALTER TABLE customer AUTO_INCREMENT = 1000;
-- Get the last inserted value
SELECT LAST_INSERT_ID();MySQL no tiene un objeto de secuencia independiente (estándar); se usa una columna AUTO_INCREMENT (una por tabla, debe estar indexada). MariaDB 10.3+ admite CREATE SEQUENCE.
SQL Server
-- IDENTITY column
CREATE TABLE customer (id INT IDENTITY(1,1) PRIMARY KEY, name NVARCHAR(100));
-- Standalone sequence object
CREATE SEQUENCE customer_seq AS INT START WITH 1 INCREMENT BY 1;
SELECT NEXT VALUE FOR customer_seq;IDENTITY(seed,increment) está ligado a una columna de tabla. CREATE SEQUENCE (2012+) proporciona un contador independiente de las tablas que puede compartirse entre tablas; los valores se obtienen con NEXT VALUE FOR.
MongoDB
// MongoDB has no auto counter; counter pattern with findOneAndUpdate
db.counters.findOneAndUpdate(
{ _id: "customer" },
{ $inc: { seq: 1 } },
{ upsert: true, returnDocument: "after" }
);El _id por defecto es un ObjectId (ya único y aproximadamente creciente). Si se necesita un entero secuencial, genérelo de forma atómica con $inc en una colección de contadores aparte.
Redis
# Atomic counter
INCR customer:id
# or with a specific step
INCRBY customer:id 10INCR/INCRBY son atómicos e ideales para generar ID únicos crecientes en entornos distribuidos. Si la clave no existe, empieza desde 0.
Elasticsearch
# Not applicable: Elasticsearch does not offer a sequence object. Document IDs are assigned automatically;
# the internal _seq_no and _primary_term fields are used for concurrency control.
POST logs/_doc
{ "message": "sample" }Si hace POST sin ID, ES asigna un _id único aleatorio (no creciente). _seq_no es un número de secuencia interno que aumenta con cada escritura, pero sirve para la concurrencia optimista, no como contador de aplicación.