1.为什么需要排它锁
事务中,有时我们在操作一条数据时,是不能让其他事务同时去操作的。
如某商品库存数量为1,如果有多个事务对该库存进行减一操作,那么库存可能出现负数。
所以,在某个事务操作时,需要把这个商品的库存锁住,不允许其他事务访问,当事务提交后,解锁,此时其他事务访问到的是操作之后的数据0,不会出现再次扣库存的情况。
2.select .. for update
数据库默认的为共享锁,即多个事务可以同时访问一条数据。
示例如下:
使用select .. for update时,只有在一个事务commit后,其他事务才能得到排它锁,继续执行。
示例如下:
select .. for update的事务会争取锁资源,而正常的select不会受锁的影响。