MST

星途 面试题库

面试题:MySQL行级锁实现原理之基本应用

在MySQL中,行级锁有哪些常见的类型?请举例说明在什么场景下会使用到不同类型的行级锁。
44.0万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

行级锁常见类型

  1. 共享锁(S锁):又称读锁,多个事务可以同时获取共享锁,从而可以同时读取数据,但不允许其他事务获取排他锁修改数据。
  2. 排他锁(X锁):又称写锁,一旦一个事务获取了排他锁,其他事务既不能获取共享锁也不能获取排他锁,即只有获取排他锁的事务能对数据进行读写操作。

不同场景举例

  1. 共享锁场景:当多个用户需要同时读取某一行数据时,例如在电商平台中查看商品详情,多个用户并发查看同一商品信息,此时可以使用共享锁。事务执行SELECT ... LOCK IN SHARE MODE语句获取共享锁,这样多个事务都能读取数据,而不会相互阻塞。例如:
START TRANSACTION;
SELECT product_name, price FROM products WHERE product_id = 1 LOCK IN SHARE MODE;
-- 此处可以进行读取操作,多个事务可以同时执行此查询并读取数据
COMMIT;
  1. 排他锁场景:当需要对某一行数据进行修改时,例如电商平台中库存扣减操作,为了避免并发修改导致数据不一致,需要使用排他锁。事务执行SELECT ... FOR UPDATE语句获取排他锁。例如:
START TRANSACTION;
SELECT stock FROM products WHERE product_id = 1 FOR UPDATE;
-- 此处读取库存数据后进行扣减操作
UPDATE products SET stock = stock - 1 WHERE product_id = 1;
COMMIT;

在这个场景下,其他事务无法同时获取该数据行的共享锁或排他锁,直到当前事务提交或回滚,保证了数据修改的原子性和一致性。