Как увеличить цифровое значение в в строке, в колонке базы данных внутри бас?



  • Есть несколько потоков, которые работают с одной и той же строкой из базы данных. Каждый из них по успешному завершению должен увеличить цифровое значение внутри этой строки, в одной из колонок.

    1. Использовать старое значение, полученное при выгрузке этой строке из базы впервые, перед работой.
      Не получится, так как оно уже могло быть обновлено другими потоками

    2. Просто в конце работы, при успешном завершении, при увеличении значения, подгрузить блоком одной записи из базы новое значение строки и сохранить его в базу, увеличив.
      Так и сделал, но почему то это значение работает криво и то уменьшается, то резко растет по не понятным причинам.

    3. Думал через глобальную перменную, но не выйдет, строк в которых изменяемое значение может быть много, известны становятся во время работы, так же могут появляться новые во время работы, хранить в глоабльном объекте не лучше чем 2ой метод.

    4. Создавать глоабльную переменную с именем строки(уник ключом), не выйдет тоже, по понятным причинам.

    Может есть метод увеличения значения в колонке строки какой то еще?



  • @derx2012 said in Как увеличить цифровое значение в в строке, в колонке базы данных внутри бас?:

    Есть несколько потоков, которые работают с одной и той же строкой из базы данных. Каждый из них по успешному завершению должен увеличить цифровое значение внутри этой строки, в одной из колонок.

    1. Использовать старое значение, полученное при выгрузке этой строке из базы впервые, перед работой.
      Не получится, так как оно уже могло быть обновлено другими потоками

    2. Просто в конце работы, при успешном завершении, при увеличении значения, подгрузить блоком одной записи из базы новое значение строки и сохранить его в базу, увеличив.
      Так и сделал, но почему то это значение работает криво и то уменьшается, то резко растет по не понятным причинам.

    3. Думал через глобальную перменную, но не выйдет, строк в которых изменяемое значение может быть много, известны становятся во время работы, так же могут появляться новые во время работы, хранить в глоабльном объекте не лучше чем 2ой метод.

    4. Создавать глоабльную переменную с именем строки(уник ключом), не выйдет тоже, по понятным причинам.

    Может есть метод увеличения значения в колонке строки какой то еще?

    Попробуйте блокировать строку в базе при использовании. Добавьте дополнительную bool колонку и фильтр, чтобы брать только свободные строки. При получении строки блокируйте её и освобождайте после окончания работы.



  • @derx2012 said in Как увеличить цифровое значение в в строке, в колонке базы данных внутри бас?:

    Просто в конце работы, при успешном завершении, при увеличении значения, подгрузить блоком одной записи из базы новое значение строки и сохранить его в базу, увеличив.
    Так и сделал, но почему то это значение работает криво и то уменьшается, то резко растет по не понятным причинам.

    Это должно работать корректно, возможно вы забыли про приведение типов, тк получая из БД число от все равно приходит как строка и может получиться такой результат например "1" + 1 = "11"


Log in to reply