Files
digital-garden/dev/database/other/Автоинкремент в БД.md
Struchkov Mark ee66c043b8
All checks were successful
continuous-integration/drone/push Build is passing
Обновление
2025-02-25 21:32:31 +03:00

5.1 KiB
Raw Permalink Blame History

aliases, tags, date
aliases tags date
автоинкремент
sequence
maturity/🌱
2025-02-18

Автоинкремент — это механизм ../../../meta/zero/00 Реляционная база данных, который автоматически увеличивает значение числового идентификатора при добавлении новой записи. Обычно он используется для генерации уникальных первичных ключей.

Для работы автоинкремента ==требуется место, где хранится последнее сгенерированное значение.== В разных СУБД это может быть реализовано через:

  • Sequences (например, CREATE SEQUENCE в PostgreSQL, Oracle);
  • Auto-increment fields (например, AUTO_INCREMENT в MySQL, IDENTITY в SQL Server);
  • Таблицы-счетчики (редко используемый способ, если СУБД не поддерживает автоинкремент напрямую).

При добавлении новой строки в таблицу БД получает следующее доступное значение из последовательности или автоинкрементного счетчика и использует его как идентификатор.

Плюсы автоинкремента

  • Сортируемость. Поскольку значения увеличиваются последовательно, записи автоматически упорядочиваются по времени вставки.
  • Легко читаемый и запоминаемый. Числовые идентификаторы проще воспринимать, чем длинные ../../Universal Unique IDentifier.
  • Оптимизация индексов. Последовательные ключи могут работать быстрее в ../Индекс базы данных, поскольку новые данные добавляются в конец индекса, а не в случайные позиции (актуально для ../../fundamental/structure/B-tree).
  • Проще отлаживать. В логах легче сопоставлять записи с их идентификаторами.

Минусы автоинкремента

  • Можно предсказать количество записей. Последовательные идентификаторы позволяют злоумышленникам оценить активность системы, например, количество заказов в интернет-магазине.
  • Легкость перебора записей. Зная один идентификатор, можно предполагать другие и пытаться получать не авторизованные данные.
  • Конечный диапазон значений. У каждого типа данных есть границы (например, BIGINT в PostgreSQL поддерживает максимум 9,223,372,036,854,775,807 записей).
  • Не хранит дополнительную информацию. В отличие от UUID, автоинкрементные идентификаторы не содержат метаданных, например, о времени создания или сервере, который их сгенерировал.

Если необходимо скрыть количество записей или усложнить перебор ID, можно использовать:

  • ../../Universal Unique IDentifier. Позволяет избежать предсказуемости, но увеличивает размер индексов.
  • Случайные ID. Вместо автоинкремента можно генерировать случайные числа.
  • Маскирование ID. Например, через хеширование (SHA-256) или кодирование (Base62).
  • Salted-ключи. Добавление уникального префикса к числам (например, ORD-1001).

Преобразование автоинкремента в UUID


Мета информация

Область:: ../../../meta/zero/00 Разработка Родитель:: ../../Идентификатор сущности Источник:: Создана:: 2025-02-18 Автор::

Дополнительные материалы

Дочерние заметки