我有一个网页,用户可以在其中创建/打开一个项目并查看/更新其信息。信息存储在 MySQL 数据库中。用户可以与他们的合作伙伴共享他们自己的项目,以便他们的合作伙伴也可以编辑他们的项目。在这种情况下,如果两个或多个用户同时打开一个特定项目,他们可以覆盖彼此的更新。因此我需要开发一个可靠的代码来防止这种并发更新并给用户适当的信息。有没有解决这种情况的模式或最佳实践?谢谢
问问题
903 次
1 回答
4
一种简单的方法是在每条记录上放置一个序列号,该序列号在记录更改时递增。当页面加载时,您将包含序列号作为隐藏<input/>
并将其与您的更新查询一起发送:
UPDATE table
SET field1 = '?', field2 = '?', sequence = sequence + 1
WHERE id = ? AND sequence = ?;
运行查询后,您可以查看修改了多少行(您的数据库 API 应该提供一种方法来检索查询后“受影响的行”的数量)。如果为零,则要么找不到记录 ID,要么记录被另一个用户修改(sequence = ?
子句不匹配)。
于 2013-07-12T18:13:51.750 回答