Créer une séquence / valeur auto-incrémentée
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));La méthode classique est CREATE SEQUENCE + NEXTVAL/CURRVAL. Depuis 12c, les colonnes GENERATED AS IDENTITY sont aussi prises en charge. Une valeur CACHE améliore les performances mais des trous peuvent apparaître.
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 est conforme au standard SQL et recommandé ; serial est l'ancienne forme abrégée. Accès manuel avec nextval/currval. La valeur peut être réinitialisée avec 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 n'a pas d'objet séquence autonome (standard) ; on utilise une colonne AUTO_INCREMENT (une par table, obligatoirement indexée). MariaDB 10.3+ prend en charge 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 lié à une colonne de table. CREATE SEQUENCE (2012+) fournit un compteur indépendant des tables, partageable entre plusieurs tables ; les valeurs sont obtenues avec 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" }
);Le _id par défaut est un ObjectId (déjà unique et à peu près croissant). Si un entier séquentiel est nécessaire, générez-le de façon atomique avec $inc dans une collection counters distincte.
Redis
# Atomic counter
INCR customer:id
# or with a specific step
INCRBY customer:id 10INCR/INCRBY sont atomiques et idéaux pour générer des ID uniques croissants dans des environnements distribués. Si la clé n'existe pas, le compteur part de 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 vous faites un POST sans ID, ES attribue un _id unique aléatoire (non croissant). _seq_no est un numéro de séquence interne qui augmente à chaque écriture, mais il sert à la concurrence optimiste, pas de compteur applicatif.