Ответ
AUTO_INCREMENT (или его аналоги) — это атрибут столбца в SQL, который инструктирует СУБД автоматически генерировать уникальные, последовательно возрастающие значения при каждой вставке новой строки. Он используется преимущественно для суррогатных первичных ключей.
Пример создания таблицы в MySQL:
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(100),
PRIMARY KEY (id)
);
-- При вставке указывать id не нужно
INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com');
Аналоги в других СУБД:
- PostgreSQL: Использует тип
SERIALилиBIGSERIAL.CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT); - SQLite: Ключевое слово
AUTOINCREMENT(рекомендуется не использовать без необходимости, чтобы не расходовать лишние ресурсы). - Oracle: Использует SEQUENCE и TRIGGER, либо
GENERATED AS IDENTITY(в современных версиях).CREATE SEQUENCE user_seq START WITH 1; CREATE TABLE users ( id NUMBER DEFAULT user_seq.NEXTVAL PRIMARY KEY, name VARCHAR2(50) );
Важные особенности:
- Пропуски значений: Пропуски могут возникать при откате транзакции, удалении строк или сбое сервера. Это нормально, и цель
AUTO_INCREMENT— обеспечить уникальность, а не непрерывность. - Безопасность в многопоточной среде: Механизм гарантирует, что две одновременные вставки получат разные значения.
- Сброс/изменение: Начальное значение и шаг можно изменить.
ALTER TABLE users AUTO_INCREMENT = 1000; - Получение последнего вставленного ID:
-- В MySQL SELECT LAST_INSERT_ID(); -- В PostgreSQL, используя RETURNING INSERT INTO users (name) VALUES ('Alice') RETURNING id;