相关疑难解决方法(0)

数据库竞争条件

我听说很多应用程序开发人员在数据库处理的竞争条件方面遇到了一些麻烦.一个典型的例子是这样的:

  • 用户1选择一个字段,比如numStock,即3
  • 用户2还选择numStock,它仍然是3
  • 用户1减少numStock(在应用程序中),并在数据库中将其设置为2.
  • 用户2还减少numStock(在应用程序中),并在数据库中将其设置为2.

在此示例中,numStock字段应该变为1,但由于用户之间的竞争而将其设置为2.

所以当然可以使用锁,但我想到了另一种处理方法 - 将所有行详细信息作为WHERE标准传递.让我解释...

在上面的示例中,SQL代码可能如下所示:

//选择

SELECT itemID, numStock FROM items WHERE itemID = 45
Run Code Online (Sandbox Code Playgroud)

//更新

UPDATE items SET numStock = 2 WHERE itemID = 45
Run Code Online (Sandbox Code Playgroud)

我想解决这个问题的想法:

//选择

SELECT itemID, numStock FROM items WHERE itemID = 45
Run Code Online (Sandbox Code Playgroud)

//更新

UPDATE items SET numStock = 2 WHERE itemID = 45 AND numStock = 3
Run Code Online (Sandbox Code Playgroud)

因此,查询检查数据是否因为选择了数据而发生了变化.所以我的问题是:(1)这[总是]会起作用吗?(2)与数据库锁定机制(例如,MySQL事务)相比,这是一个更好的选择吗?

谢谢你的时间.

database race-condition

5
推荐指数
1
解决办法
8130
查看次数

如何在续集中锁定表,等到另一个请求完成

描述:

我在db中有一个表说Table1.只有一列AppNo(numeric),只有一行,当前值是0

我在node.js使用SequelizeORM命名时创建了API UpdateAppNo.

每当UpdateAppNoapi调用值AppNo应该增加1.

我想要的是:

如果同时发出2个或更多同时请求,则当前请求应等到上一个请求完成.

现在发生了什么:

如果先前的请求正在进行中,则当前请求将引发错误.

node.js sequelize.js

5
推荐指数
2
解决办法
5768
查看次数

带有 Sequelize 的加法和减法赋值运算符

我想通过对 Sequelize 做一个简单的添加来进行更新。

桌子:

id || data
 1 ||  10 
Run Code Online (Sandbox Code Playgroud)

样本:

db.table.update({ data : 1 }, { where: { id: 1 }});
Run Code Online (Sandbox Code Playgroud)

在这个查询之后

id || data
 1 ||  11
Run Code Online (Sandbox Code Playgroud)

我知道这是一个简单的问题,但我找不到解决方案。

我可以加减哪个运算符?谢谢

subtraction variable-assignment addition node.js sequelize.js

1
推荐指数
1
解决办法
2534
查看次数