mysql实现乐观锁
当需要更新销售中的商品数量(selling_amount)时,使⽤如下的SQL语句:
update product_amount set selling_amount = #{selling_amount}, version = #{new_version} where id=#{id} and version = # {old_version};
若该语句返回1,则表⽰更新成功;若返回0,则表⽰前后的version不⼀致,产⽣冲突,更新失败
对于更新仓库中的商品数据(storing_amount)时,也是同理
不过,这样为每⾏记录都统⼀设置⼀个version字段的乐观锁⽅式,存在⼀个问题:上例中,如果同时需要单独对selling_amount及storing_amount进⾏update(两条SQL语句分别单独执⾏),那么后执⾏的⼀条会因为先执⾏的⼀条更新了version字段⽽失败,⽽这种失败显然是没有必要的,⽩⽩浪费了开销
⼀种⽐较好的⽅式是为每个需要乐观锁的字段单独设置版本号,例如对上例的改造:
create table product_amount (mysql下载odbc失败
id int not null primary key auto_increment,
product_name varchar(64) not null,
selling_amount int not null,
selling_version int not null,
storing_amount int not null,
storing_version int not null
);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。