Ответ
Нет, поддержка и синтаксис различаются. Хотя большинство современных реляционных СУБД предоставляют механизмы для автоматической генерации уникальных значений, конкретные ключевые слова и реализации отличаются.
Сравнение в популярных СУБД:
| СУБД | Механизм автоинкремента | Пример 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-скриптов необходимо учитывать особенности целевой СУБД.