看网上例子都是加了一个"version"(版本号)的字段,然后更新语句是:
// 查询需要更新的数据的版本号
SELECT VERSION FROM `ubo_crowd` WHERE crowd_id = 12;
// 更新数据,这里#{version}表示上面查询得到的版本号
UPDATE `ubo_crowd` SET STATUS=2,VERSION=VERSION+1 WHERE crowd_id=12 AND VERSION=#{version};
我现在设计了一张stock
的表,一个id
和num
字段,感觉num
字段直接就可以当作版本号的作用
// num 是之前 select 语句读取出来的
const results = await this.app.mysql
.query('update stock set num = num - 1 where id = ? and num = ?', [id, num])
我觉得乐观锁也是靠 MySQL 的行锁( update 语句的缘故)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.