Для чего нужен тип данных BIGINT в базах данных?

Ответ

BIGINT — это целочисленный тип данных SQL, предназначенный для хранения очень больших чисел, которые выходят за пределы стандартного INT.

Ключевые характеристики и применение:

  • Размер: Обычно занимает 8 байт (64 бита).
  • Диапазон значений:
    • SIGNED (со знаком): от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
    • UNSIGNED (без знака): от 0 до 18 446 744 073 709 551 615
  • Типичные сценарии использования:
    • Первичные ключи в таблицах с потенциально огромным количеством записей (например, в крупных социальных сетях, аналитических системах).
    • Системные идентификаторы, такие как Snowflake ID, которые часто представляют собой 64-битные числа.
    • Агрегированные счетчики (просмотры, лайки, транзакции) в высоконагруженных системах.
    • Финансовые операции с высокой точностью в определенных доменах.

Пример создания таблицы:

CREATE TABLE user_actions (
    action_id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    timestamp DATETIME,
    INDEX idx_user (user_id)
);

Почему это важно: Использование BIGINT для первичных ключей с автоинкрементом — это распространенная практика «на вырост», которая страхует от переполнения INT (максимум ~2.1 млрд записей) в долгосрочной перспективе, особенно в быстрорастущих проектах.

Ответ 18+ 🔞

Э, слушай, смотри, вот тебе история про BIGINT, такая простая, что даже манда с ушами поймёт. Это, блядь, просто цифровой сейф для чисел, которые настолько огромные, что обычному INT от них волнение ебать и терпения ноль ебать.

Что это за зверь и где его применяют:

  • Сколько жрёт: Обычно хавает 8 байт, не жмот.
  • Сколько влезет:
    • Если со знаком (SIGNED) — там минус девять квинтиллионов каких-то, овердохуища просто. Плюс столько же.
    • Если без знака (UNSIGNED) — от нуля до восемнадцати квинтиллионов, ёпта. Хуй с горы такой цифры достанешь.
  • Где это нужно, чтобы не обосраться:
    • Для главных ключей в таблицах, которые растут как сумасшедшие. Типа лента в соцсети — там записей может быть больше, чем стандартный INT вмещает (а это, на минуточку, всего ~2.1 миллиарда). Представь, таблица накрылась медным тазом, потому что ключи кончились — пиздец просто.
    • Всякие модные системные айдишники вроде Snowflake ID — они как раз 64-битные, под BIGINT идеально.
    • Счетчики, которые уже охуели от количества: просмотры, лайки, транзакции.
    • Деньги в каких-нибудь хитрых расчётах, где копейки копятся в астрономических масштабах.

Вот тебе пример, как это в коде выглядит:

CREATE TABLE user_actions (
    action_id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    timestamp DATETIME,
    INDEX idx_user (user_id)
);

А суть-то в чём, ёпта? Использовать BIGINT для автоинкрементных ключей — это как брать квартиру с запасом. Не потому что сейчас семья из двух человек, а потому что вдруг тройня случится. Это страховка от будущего пиздеца, когда твой проект выстрелит и в таблице будет не два миллиарда записей, а двадцать. И тогда ты не будешь орать «какого хуя?!», а спокойно продолжишь работать.