У меня проблема с NodeJS. Когда я пытаюсь опубликовать/обновить
One balance
One account
- сообщение от
Two different users
at the same time.
Пример:
У меня есть API с ExpressJS для отправки данных в таблицу t_account
, как это.
Мне нужно сначала получить последний баланс от max(id)
после каждой транзакции.
Я пытаюсь получить баланс 400 NOT
300
Например:
- Начальный баланс = 100
- 1-й новый пост = 100, => баланс = 200
- 2-й новый пост = 200, => баланс =400
Пример кода:
router.post('/saveBalance',async function (req, res) {
try {
let SQL="SELECT balance FROM t_account WHERE id=(SELECT max(id) FROM t_account WHERE no='"+req.body.no+"')";
let queryResult=await db.myexec(SQL);
let newBalance=queryResult[0].balance+req.body.balance;
let SQL2="INSERT INTO t_account(no,balance) VALUES('"+req.body.no+"',"+newBalance+")";
let queryResult2=await db.myexec(SQL2);
res.status(200).json( {
error:"false",
code:"00",
message:"Balance Bank is saved",
})
} catch (error) {
res.status(400).json( {
error:"true",
code:"03",
message:"Balance Bank failed to saved",
})
}})
Проблема в том, что когда два пользователя публикуют данные одновременно, я получаю неверный баланс.
Пример кода инициализации моих транзакций:
const axios = require('axios'); axios.post('http://localhost:3000/rbank/saveBalance/', { "no":"11", "balance":100 } ) axios.post('http://localhost:3000/rbank/saveBalance/', { "no":"11", "balance":200 } )
MySQL
Журналы консоли
Последний баланс неправильный, показывает 300 вместо 400.
Что здесь происходит не так?