MST

星途 面试题库

面试题:MySQL锁在分布式事务中常见的应用场景有哪些

请阐述MySQL锁在分布式事务里,像订单处理、库存管理等业务场景中是如何应用的,举例说明其作用和基本原理。
35.2万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

应用方式

在订单处理与库存管理这类分布式事务场景中,MySQL锁通常用于保证数据的一致性与完整性。例如,在库存管理中,当一个订单创建需要扣减库存时,会使用行级锁。假设库存表 stock 有字段 product_idquantity,当处理一个针对产品 product_id=1 的订单时,会执行类似 SELECT quantity FROM stock WHERE product_id = 1 FOR UPDATE; 的语句,此语句会锁定 product_id = 1 这一行数据。

作用

  1. 防止并发冲突:避免多个订单同时扣减同一产品库存时出现超卖情况。例如,若没有锁机制,两个并发订单同时读取库存为10,都进行扣减操作,最终库存可能变为8而不是预期的9,使用锁可确保只有一个订单操作完成后,另一个订单才能进行操作,从而保证库存数据的准确性。
  2. 保证事务一致性:在分布式事务中,订单处理和库存管理可能分布在不同服务中,MySQL锁确保各个操作按照预定顺序执行,比如订单创建成功后才能扣减库存,若订单创建失败,库存不会被误扣,维持整个业务流程的数据一致性。

基本原理

MySQL的行级锁是基于索引实现的。以刚才库存表为例,当执行 SELECT... FOR UPDATE 语句时,数据库会根据 product_id 索引定位到对应的行,并对该行加锁。只有持有锁的事务才能对该行数据进行修改,其他事务尝试修改时会进入等待状态,直到锁被释放。这种机制通过锁定关键数据行,保证了在并发环境下,数据操作的原子性和顺序性,进而保障了分布式事务在复杂业务场景中的正确性。