Поддерживается ли автоинкремент первичного ключа во всех реляционных СУБД?

«Поддерживается ли автоинкремент первичного ключа во всех реляционных СУБД?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, поддержка и синтаксис различаются. Хотя большинство современных реляционных СУБД предоставляют механизмы для автоматической генерации уникальных значений, конкретные ключевые слова и реализации отличаются.

Сравнение в популярных СУБД:

СУБД Механизм автоинкремента Пример DDL
MySQL / MariaDB AUTO_INCREMENT id INT AUTO_INCREMENT PRIMARY KEY
PostgreSQL SERIAL (псевдотип) или GENERATED AS IDENTITY (стандарт SQL) id SERIAL PRIMARY KEY или id INT GENERATED ALWAYS AS IDENTITY
Oracle SEQUENCE + TRIGGER (в старом стиле) или GENERATED AS IDENTITY (с 12c) CREATE SEQUENCE seq_name; + триггер ИЛИ id NUMBER GENERATED ALWAYS AS IDENTITY
SQL Server IDENTITY id INT IDENTITY(1,1) PRIMARY KEY
SQLite AUTOINCREMENT (необязательно) id INTEGER PRIMARY KEY AUTOINCREMENT

Ключевые различия:

  • Стандарт SQL: GENERATED AS IDENTITY — это стандартный SQL способ, который постепенно внедряется (PostgreSQL, Oracle, DB2).
  • Последовательности (SEQUENCE): В Oracle и PostgreSQL (помимо SERIAL) можно явно создавать и управлять последовательностями, что дает больше гибкости.
  • NoSQL базы данных (MongoDB, Cassandra) используют совершенно другие механизмы генерации ID (например, ObjectId в MongoDB), которые не являются аналогом пошагового инкремента.

Вывод: При написании переносимого кода или DDL-скриптов необходимо учитывать особенности целевой СУБД.