问题
看网上例子都是加了一个"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 语句的缘故)