MST

星途 面试题库

面试题:MySQL常见的锁类型及应用场景

请简述MySQL中共享锁(S锁)、排他锁(X锁)、意向共享锁(IS锁)和意向排他锁(IX锁)的特点,并举例说明它们在实际应用中的场景。
47.0万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

共享锁(S锁)

  • 特点:又称读锁,多个事务可以同时对同一数据对象加共享锁,互不影响,即允许多个事务并发读取数据。但是当数据对象上有共享锁时,其他事务不能对其加排他锁。
  • 应用场景:常用于数据读取操作较多的场景,例如在电商系统中,多个用户同时查询商品信息,此时可以对商品数据加共享锁,保证数据读取的一致性,同时提高并发性能。例如,多个用户同时查看某一商品的详情页,这些查询操作可以同时获取共享锁。

排他锁(X锁)

  • 特点:又称写锁,一旦某个事务对数据对象加上排他锁,其他事务就不能再对该数据对象加任何类型的锁,直到持有排他锁的事务释放锁。这确保了同一时间只有一个事务可以对数据进行修改,避免数据竞争和不一致。
  • 应用场景:适用于数据修改操作,如电商系统中,当用户下单购买商品时,为了防止超卖,需要对商品库存数据加排他锁,在修改库存操作完成前,其他事务无法修改该库存数据。

意向共享锁(IS锁)

  • 特点:表示事务意图在更低层次的对象上加共享锁。当一个事务想要在某个数据对象(如行)上加共享锁时,首先需要在该数据对象的上级对象(如表)上加意向共享锁。意向共享锁之间是兼容的,多个事务可以同时在同一个上级对象上加意向共享锁。
  • 应用场景:在数据库进行表级操作时,如果需要对表中的部分行加共享锁,就会先在表上加意向共享锁。例如,在银行转账操作中,涉及到对账户表中的某些账户记录进行读取操作,此时先在账户表上加意向共享锁,然后再对具体的账户记录加共享锁。

意向排他锁(IX锁)

  • 特点:表示事务意图在更低层次的对象上加排他锁。与意向共享锁类似,当一个事务想要在某个数据对象上加排他锁时,需先在上级对象上加意向排他锁。意向排他锁与共享锁、意向共享锁不兼容,但意向排他锁之间是兼容的。
  • 应用场景:当需要对表中的某些行进行修改操作时,先在表上加意向排他锁,再对具体行加排他锁。比如在社交平台中,当管理员要修改某个用户的重要信息时,先在用户表上加意向排他锁,然后对具体用户记录加排他锁进行修改。