DBAtlas · Атлас эксплуатации баз данных

Создать последовательность / автоинкрементное значение

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));

Классический способ — CREATE SEQUENCE + NEXTVAL/CURRVAL. С 12c поддерживаются также столбцы GENERATED AS IDENTITY. Значение CACHE повышает производительность, но возможны пропуски.

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 соответствует стандарту SQL и рекомендуется; serial — устаревшая сокращённая форма. Ручной доступ — через nextval/currval. Значение можно сбросить через 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 нет отдельного (стандартного) объекта последовательности; используется столбец AUTO_INCREMENT (один на таблицу, должен быть проиндексирован). MariaDB 10.3+ поддерживает 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) привязан к столбцу таблицы. CREATE SEQUENCE (2012+) даёт независимый от таблиц счётчик, который можно использовать в нескольких таблицах; значения получают через 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" }
);

По умолчанию _id — это ObjectId (уже уникален и примерно возрастает). Если нужно последовательное целое, генерируйте его атомарно через $inc в отдельной коллекции counters.

Redis

# Atomic counter
INCR customer:id
# or with a specific step
INCRBY customer:id 10

INCR/INCRBY атомарны и идеально подходят для генерации уникальных возрастающих ID в распределённых средах. Если ключа нет, отсчёт начинается с 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" }

Если выполнить POST без ID, ES назначает случайный уникальный _id (не возрастающий). _seq_no — внутренний порядковый номер, растущий с каждой записью, но он предназначен для оптимистичной конкурентности, а не как счётчик приложения.

Открыть в DBAtlas →