面试题答案
一键面试应用方式
在订单处理与库存管理这类分布式事务场景中,MySQL锁通常用于保证数据的一致性与完整性。例如,在库存管理中,当一个订单创建需要扣减库存时,会使用行级锁。假设库存表 stock
有字段 product_id
和 quantity
,当处理一个针对产品 product_id=1
的订单时,会执行类似 SELECT quantity FROM stock WHERE product_id = 1 FOR UPDATE;
的语句,此语句会锁定 product_id = 1
这一行数据。
作用
- 防止并发冲突:避免多个订单同时扣减同一产品库存时出现超卖情况。例如,若没有锁机制,两个并发订单同时读取库存为10,都进行扣减操作,最终库存可能变为8而不是预期的9,使用锁可确保只有一个订单操作完成后,另一个订单才能进行操作,从而保证库存数据的准确性。
- 保证事务一致性:在分布式事务中,订单处理和库存管理可能分布在不同服务中,MySQL锁确保各个操作按照预定顺序执行,比如订单创建成功后才能扣减库存,若订单创建失败,库存不会被误扣,维持整个业务流程的数据一致性。
基本原理
MySQL的行级锁是基于索引实现的。以刚才库存表为例,当执行 SELECT... FOR UPDATE
语句时,数据库会根据 product_id
索引定位到对应的行,并对该行加锁。只有持有锁的事务才能对该行数据进行修改,其他事务尝试修改时会进入等待状态,直到锁被释放。这种机制通过锁定关键数据行,保证了在并发环境下,数据操作的原子性和顺序性,进而保障了分布式事务在复杂业务场景中的正确性。