Ответ
В контексте баз данных под «инкрементом» обычно понимают операцию увеличения числового значения в записи. В SQL это делается с помощью оператора UPDATE.
Основные сценарии использования:
-
Счётчики и метрики Самый частый случай — увеличение счётчика просмотров, лайков или количества попыток.
UPDATE articles SET view_count = view_count + 1 WHERE id = 123; -
Инвентаризация и балансы Уменьшение количества товара на складе при оформлении заказа.
UPDATE products SET stock_quantity = stock_quantity - :ordered_qty WHERE id = :product_id; -
Атомарные операции для избежания race condition Такой подход безопасен в конкурентной среде, так как операция выполняется на стороне БД.
-- Небезопасно (сначала читаем, потом обновляем в коде): -- SELECT likes FROM post WHERE id=5; (Получили 10) -- UPDATE post SET likes = 11 WHERE id=5; (Может быть перезаписано другим процессом) -- Безопасно (атомарный инкремент в БД): UPDATE post SET likes = likes + 1 WHERE id = 5;
Важно: Для очень высоконагруженных счётчиков в некоторых СУБД (например, Redis) есть специальные команды вроде INCR, которые ещё более эффективны.
Ответ 18+ 🔞
Смотри, про инкремент в базах — это ж классика, ёпта. Типа когда тебе надо не просто число поменять, а именно прибавить к тому, что уже есть. В SQL это делается через обычный UPDATE, только хитро.
Где это реально нужно, а не просто от нехуй делать:
-
Счётчики всякие Ну, самый понятный пример — просмотры статей или лайки. Чтобы не выёбываться с чтением-изменением в коде, пишешь одну строчку и спишь спокойно.
UPDATE articles SET view_count = view_count + 1 WHERE id = 123;Вот и всё, блядь. Счётчик пошёл вверх. Красота.
-
Склад и деньги Товар на складе, баланс пользователя — там тоже постоянно что-то прибавляется или убавляется. Заказ оформили — отнимаем.
UPDATE products SET stock_quantity = stock_quantity - :ordered_qty WHERE id = :product_id;Главное, чтобы минус не ушёл в отрицательные значения, а то будет тебе хиросима, а не инвентарь.
-
Самое важное — атомарность, чтобы не было гонок Вот тут многие обжигаются, сука. Если ты сначала в коде прочитал значение, потом к нему единичку прибавил и обратно записал — это пиздец как небезопасно. Пока ты думал, другой процесс уже мог это же значение изменить.
-- Так делать — манда с ушами (читаем, потом обновляем): -- SELECT likes FROM post WHERE id=5; (Допустим, получил 10) -- UPDATE post SET likes = 11 WHERE id=5; (А тут уже могло быть 15!) -- А вот так — правильно, атомарно и на совесть: UPDATE post SET likes = likes + 1 WHERE id = 5;База сама разберётся, потому что операция выполняется целиком на её стороне. Доверия к этому подходу — овердохуища.
Ну и на последок: если у тебя счётчик просто заебался от нагрузки (миллионы обновлений в секунду), то может, тебе не реляционную базу мучать, а посмотреть в сторону Redis, у них там команда INCR для этого сделана. Но это уже совсем другая история, чувак.