在面试中,性能优化和问题排查一直是一个很加分的东西,而数据库层面上的性能优化和问题排查更加能够加分。
这个案例的特殊之处在于,它是性能优化,因为它将表锁优化掉了;它也是问题排查,因为表锁会严重拖累数据库的性能,还容易引发死锁问题;更加重要的是,它还和乐观锁关联在了一起。
因此这个案例非常适合实习生、应届生和初级工程师使用。并且它还有一个特点,就是适应性非常广泛,以至于你随便说自己的业务里面有这个问题,都没有人会怀疑。
总的来说:
案例的代码在这里:interview-cases/case21_30/case30 at main · meoying/interview-cases (github.com)
案例其实很简单,核心有两个点:
当然了,大多数情况下, SELECT FOR UPDATE 后面一般都是跟着一个 UPDATE 语句。正常来说 SELECT FOR UPDATE 如果命中数据,那么使用的是行锁,但是没有命中数据,使用的就是表锁了。