海角不转弯

代码是梦想的砖

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

InnoDB 悲观锁:

抢购场景下的减库存问题

首先需要设置 mysql 为非autocommit

set autocommit = 0;

具体事务如下

begin;begin work;start transaction;(三选一)

select stock from goods where id = 1 for update;

insert into orders (id,good_id,num) values(null,1,2);

update goods set stock = stock - 2 where id = 1;

commit;

  

InnoDB支持通过特定的语句进行显示加锁:

select...lock in share mode

select...for udpate

但是执行for update会产生一些其他的影响

1.select语句变慢

2.一些优化无法正常使用,例如索引覆盖扫描

3.很容易造成服务器的锁争用问题

 

posted on 2017-07-06 16:26  海角不转弯  阅读(141)  评论(0编辑  收藏  举报