Где используют инкремент в SQL?

Ответ

В контексте баз данных под «инкрементом» обычно понимают операцию увеличения числового значения в записи. В SQL это делается с помощью оператора UPDATE.

Основные сценарии использования:

  1. Счётчики и метрики Самый частый случай — увеличение счётчика просмотров, лайков или количества попыток.

    UPDATE articles SET view_count = view_count + 1 WHERE id = 123;
  2. Инвентаризация и балансы Уменьшение количества товара на складе при оформлении заказа.

    UPDATE products SET stock_quantity = stock_quantity - :ordered_qty WHERE id = :product_id;
  3. Атомарные операции для избежания 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, только хитро.

Где это реально нужно, а не просто от нехуй делать:

  1. Счётчики всякие Ну, самый понятный пример — просмотры статей или лайки. Чтобы не выёбываться с чтением-изменением в коде, пишешь одну строчку и спишь спокойно.

    UPDATE articles SET view_count = view_count + 1 WHERE id = 123;

    Вот и всё, блядь. Счётчик пошёл вверх. Красота.

  2. Склад и деньги Товар на складе, баланс пользователя — там тоже постоянно что-то прибавляется или убавляется. Заказ оформили — отнимаем.

    UPDATE products SET stock_quantity = stock_quantity - :ordered_qty WHERE id = :product_id;

    Главное, чтобы минус не ушёл в отрицательные значения, а то будет тебе хиросима, а не инвентарь.

  3. Самое важное — атомарность, чтобы не было гонок Вот тут многие обжигаются, сука. Если ты сначала в коде прочитал значение, потом к нему единичку прибавил и обратно записал — это пиздец как небезопасно. Пока ты думал, другой процесс уже мог это же значение изменить.

    -- Так делать — манда с ушами (читаем, потом обновляем):
    -- 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 для этого сделана. Но это уже совсем другая история, чувак.