BIGINT в MySQL — 100 практических примеров для 64‑битных целых

100 приёмов BIGINT в MySQL: схемы, PK/FK, AUTO_INCREMENT, маски, окна, JSON, импорт, безопасность.

🟢 BIGINT в MySQL. Введение

BIGINT — 64‑битный целочисленный тип для больших идентификаторов, счётчиков и сумм в «центах». Ниже — синтаксис, типовой шаблон и 100 практических сценариев.

Синтаксис

CREATE TABLE users (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  email VARCHAR(255) NOT NULL
);
ALTER TABLE orders
MODIFY COLUMN customer_id BIGINT NOT NULL;
SELECT id, total_cents
FROM invoices
WHERE total_cents BETWEEN 100 AND 500000;
SELECT CAST(JSON_EXTRACT(meta,'$.uid') AS UNSIGNED) AS uid
FROM events;

Типовая конструкция

CREATE TABLE payments (
  payment_id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  user_id BIGINT UNSIGNED NOT NULL,
  amount_cents BIGINT NOT NULL,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  INDEX (user_id)
);

100 примеров

Маркетплейс: первичный ключ AUTO_INCREMENT

CREATE TABLE orders_1 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Финансы: первичный ключ AUTO_INCREMENT

CREATE TABLE invoices_2 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

IoT: первичный ключ AUTO_INCREMENT

CREATE TABLE metrics_iot_3 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Соцсеть: первичный ключ AUTO_INCREMENT

CREATE TABLE likes_4 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Логирование: первичный ключ AUTO_INCREMENT

CREATE TABLE logs_5 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

CRM: первичный ключ AUTO_INCREMENT

CREATE TABLE customers_6 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Аналитика: первичный ключ AUTO_INCREMENT

CREATE TABLE user_stats_7 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Телеком: первичный ключ AUTO_INCREMENT

CREATE TABLE phone_book_8 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Реклама: первичный ключ AUTO_INCREMENT

CREATE TABLE ad_clicks_9 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Игры: первичный ключ AUTO_INCREMENT

CREATE TABLE game_events_10 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Маркетплейс: первичный ключ AUTO_INCREMENT

CREATE TABLE orders_11 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Финансы: первичный ключ AUTO_INCREMENT

CREATE TABLE invoices_12 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

IoT: первичный ключ AUTO_INCREMENT

CREATE TABLE metrics_iot_13 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Соцсеть: первичный ключ AUTO_INCREMENT

CREATE TABLE likes_14 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Логирование: первичный ключ AUTO_INCREMENT

CREATE TABLE logs_15 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

CRM: первичный ключ AUTO_INCREMENT

CREATE TABLE customers_16 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Аналитика: первичный ключ AUTO_INCREMENT

CREATE TABLE user_stats_17 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Телеком: первичный ключ AUTO_INCREMENT

CREATE TABLE phone_book_18 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Реклама: первичный ключ AUTO_INCREMENT

CREATE TABLE ad_clicks_19 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Игры: первичный ключ AUTO_INCREMENT

CREATE TABLE game_events_20 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  created_at DATETIME NOT NULL
);

Маркетплейс: внешний ключ на BIGINT

CREATE TABLE orders_child_21 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  parent_id BIGINT UNSIGNED NOT NULL,
  CONSTRAINT fk_orders_21 FOREIGN KEY (parent_id) REFERENCES orders_1(id)
);

Финансы: внешний ключ на BIGINT

CREATE TABLE invoices_child_22 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  parent_id BIGINT UNSIGNED NOT NULL,
  CONSTRAINT fk_invoices_22 FOREIGN KEY (parent_id) REFERENCES invoices_2(id)
);

IoT: внешний ключ на BIGINT

CREATE TABLE metrics_iot_child_23 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  parent_id BIGINT UNSIGNED NOT NULL,
  CONSTRAINT fk_metrics_iot_23 FOREIGN KEY (parent_id) REFERENCES metrics_iot_3(id)
);

Соцсеть: внешний ключ на BIGINT

CREATE TABLE likes_child_24 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  parent_id BIGINT UNSIGNED NOT NULL,
  CONSTRAINT fk_likes_24 FOREIGN KEY (parent_id) REFERENCES likes_4(id)
);

Логирование: внешний ключ на BIGINT

CREATE TABLE logs_child_25 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  parent_id BIGINT UNSIGNED NOT NULL,
  CONSTRAINT fk_logs_25 FOREIGN KEY (parent_id) REFERENCES logs_5(id)
);

Ещё примеры

CRM: внешний ключ на BIGINT

CREATE TABLE customers_child_26 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  parent_id BIGINT UNSIGNED NOT NULL,
  CONSTRAINT fk_customers_26 FOREIGN KEY (parent_id) REFERENCES customers_6(id)
);

Аналитика: внешний ключ на BIGINT

CREATE TABLE user_stats_child_27 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  parent_id BIGINT UNSIGNED NOT NULL,
  CONSTRAINT fk_user_stats_27 FOREIGN KEY (parent_id) REFERENCES user_stats_7(id)
);

Телеком: внешний ключ на BIGINT

CREATE TABLE phone_book_child_28 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  parent_id BIGINT UNSIGNED NOT NULL,
  CONSTRAINT fk_phone_book_28 FOREIGN KEY (parent_id) REFERENCES phone_book_8(id)
);

Реклама: внешний ключ на BIGINT

CREATE TABLE ad_clicks_child_29 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  parent_id BIGINT UNSIGNED NOT NULL,
  CONSTRAINT fk_ad_clicks_29 FOREIGN KEY (parent_id) REFERENCES ad_clicks_9(id)
);

Игры: внешний ключ на BIGINT

CREATE TABLE game_events_child_30 (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  parent_id BIGINT UNSIGNED NOT NULL,
  CONSTRAINT fk_game_events_30 FOREIGN KEY (parent_id) REFERENCES game_events_10(id)
);

Инкремент счётчика просмотров

UPDATE pageviews
SET views = views + 1
WHERE id=123;

JSON→BIGINT при импорте событий

1)

SELECT CAST(JSON_EXTRACT(meta,'$.user_id') AS UNSIGNED) AS user_id
FROM events;

2)

SELECT CAST(JSON_EXTRACT(meta,'$.user_id') AS UNSIGNED) AS user_id
FROM events;

3)

SELECT CAST(JSON_EXTRACT(meta,'$.user_id') AS UNSIGNED) AS user_id
FROM events;

4)

SELECT CAST(JSON_EXTRACT(meta,'$.user_id') AS UNSIGNED) AS user_id
FROM events;

5)

SELECT CAST(JSON_EXTRACT(meta,'$.user_id') AS UNSIGNED) AS user_id
FROM events;

6)

SELECT CAST(JSON_EXTRACT(meta,'$.user_id') AS UNSIGNED) AS user_id
FROM events;

7)

SELECT CAST(JSON_EXTRACT(meta,'$.user_id') AS UNSIGNED) AS user_id
FROM events;

8)

SELECT CAST(JSON_EXTRACT(meta,'$.user_id') AS UNSIGNED) AS user_id
FROM events;

9)

SELECT CAST(JSON_EXTRACT(meta,'$.user_id') AS UNSIGNED) AS user_id
FROM events;

10)

SELECT CAST(JSON_EXTRACT(meta,'$.user_id') AS UNSIGNED) AS user_id
FROM events;

Ещё примеры

Топ клиентов по сумме в центах

SELECT customer_id,
       RANK() OVER (ORDER BY SUM(total_cents) DESC) AS r
FROM orders
GROUP BY customer_id;

Скользящая сумма по платежам

SELECT user_id, created_at, amount_cents,
       SUM(amount_cents) OVER (PARTITION BY user_id ORDER BY created_at ROWS 9 PRECEDING) AS sum10
FROM payments;

Скользящая сумма по платежам

SELECT user_id, created_at, amount_cents,
       SUM(amount_cents) OVER (PARTITION BY user_id ORDER BY created_at ROWS 9 PRECEDING) AS sum10
FROM payments;

Пагинация по PK без OFFSET

SELECT id, data
FROM big_rows
WHERE id > 9000000000
ORDER BY id
LIMIT 100;

Ещё примеры

Диагностика шарда по модулю

1)

SELECT id
FROM big_table
WHERE id % 1000 = 7
ORDER BY id
LIMIT 100;

2)

SELECT id
FROM big_table
WHERE id % 1000 = 7
ORDER BY id
LIMIT 100;

3)

SELECT id
FROM big_table
WHERE id % 1000 = 7
ORDER BY id
LIMIT 100;

4)

SELECT id
FROM big_table
WHERE id % 1000 = 7
ORDER BY id
LIMIT 100;

5)

SELECT id
FROM big_table
WHERE id % 1000 = 7
ORDER BY id
LIMIT 100;

Контроль целостности FK BIGINT

1)

SELECT o.id
FROM orders o
LEFT JOIN customers c ON c.id=o.customer_id
WHERE c.id IS NULL;

2)

SELECT o.id
FROM orders o
LEFT JOIN customers c ON c.id=o.customer_id
WHERE c.id IS NULL;

3)

SELECT o.id
FROM orders o
LEFT JOIN customers c ON c.id=o.customer_id
WHERE c.id IS NULL;

4)

SELECT o.id
FROM orders o
LEFT JOIN customers c ON c.id=o.customer_id
WHERE c.id IS NULL;

5)

SELECT o.id
FROM orders o
LEFT JOIN customers c ON c.id=o.customer_id
WHERE c.id IS NULL;

Жёсткий предохранитель для DELETE

1)

DELETE FROM sensitive
WHERE id BETWEEN 0 AND 9999999999999999
AND 1=0;

2)

DELETE FROM sensitive
WHERE id BETWEEN 0 AND 9999999999999999
AND 1=0;

3)

DELETE FROM sensitive
WHERE id BETWEEN 0 AND 9999999999999999
AND 1=0;

4)

DELETE FROM sensitive
WHERE id BETWEEN 0 AND 9999999999999999
AND 1=0;

5)

DELETE FROM sensitive
WHERE id BETWEEN 0 AND 9999999999999999
AND 1=0;

Ещё примеры

UUID→BIGINT‑хеш (первые 8 байт)

SELECT CAST(CONV(SUBSTRING(REPLACE(uuid, '-', ''), 1, 16), 16, 10) AS UNSIGNED) AS id64
FROM uuid_map;

Форматирование суммы в рублях из центов

SELECT SUM(amount_cents) AS cents,
       CONCAT(FLOOR(SUM(amount_cents)/100), '.', LPAD(SUM(amount_cents)%100,2,'0')) AS amount
FROM invoices;

Сборка 64‑битового идентификатора из high/low

SELECT (CAST(high AS UNSIGNED) << 32) + CAST(low AS UNSIGNED) AS combined
FROM parts;

Разбор 64‑битового идентификатора на high/low

SELECT (id64 >> 32) AS high,
       (id64 & 4294967295) AS low
FROM ids64;

Контроль переполнения сумм в отчёте

SELECT CASE WHEN SUM(amount_cents) > 9000000000000000000 THEN 'overflow' ELSE 'ok' END AS state
FROM invoices;

Ещё примеры

Срез по рыночной капитализации v96

SELECT asset_id, cap
FROM market_caps
WHERE cap BETWEEN 1000000000 AND 100000000000;

Экспорт ID как строки для CSV v97

SELECT CAST(id AS CHAR) AS id_txt
FROM accounts;

Индекс по foreign key BIGINT v98

CREATE INDEX ix_orders_customer
ON orders (customer_id);

Хранение суммы денег в центах v99

CREATE TABLE invoices_core (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  amount_cents BIGINT NOT NULL
 -- v99
);;

RANGE COLUMNS по org_id v100

CREATE TABLE balances_core (
  id BIGINT,
  org_id BIGINT,
  amount BIGINT
 -- v100
);
PARTITION BY RANGE COLUMNS(org_id -- v100
); (
  PARTITION p1 VALUES LESS THAN (1000 -- v100
);,
  PARTITION p2 VALUES LESS THAN (2000 -- v100
);,
  PARTITION pmax VALUES LESS THAN (MAXVALUE -- v100
);
 -- v100
);;

Типичные ошибки и советы по BIGINT в MySQL

  • Знак: выбирайте UNSIGNED для идентификаторов и неотрицательных счётчиков.
  • Переполнения: контролируйте верхние границы в UPDATE и агрегатах.
  • Индексы: добавляйте индексы на JOIN и фильтры по диапазонам.
  • JSON: приводите типы через CAST при чтении из JSON.
  • Деньги: храните суммы в центах или используйте DECIMAL по требованиям финансов.

🟢 BIGINT в MySQL. Заключение

BIGINT масштабирует идентификаторы и счётчики, помогает аналитике и хранению денег. Правильно подбирайте знак и индексы.

Понравилась статья? Поделиться с друзьями: