面试题答案
一键面试共享锁(S锁)
- 特点:又称读锁,多个事务可以同时对同一数据对象加共享锁,互不影响,即允许多个事务并发读取数据。但是当数据对象上有共享锁时,其他事务不能对其加排他锁。
- 应用场景:常用于数据读取操作较多的场景,例如在电商系统中,多个用户同时查询商品信息,此时可以对商品数据加共享锁,保证数据读取的一致性,同时提高并发性能。例如,多个用户同时查看某一商品的详情页,这些查询操作可以同时获取共享锁。
排他锁(X锁)
- 特点:又称写锁,一旦某个事务对数据对象加上排他锁,其他事务就不能再对该数据对象加任何类型的锁,直到持有排他锁的事务释放锁。这确保了同一时间只有一个事务可以对数据进行修改,避免数据竞争和不一致。
- 应用场景:适用于数据修改操作,如电商系统中,当用户下单购买商品时,为了防止超卖,需要对商品库存数据加排他锁,在修改库存操作完成前,其他事务无法修改该库存数据。
意向共享锁(IS锁)
- 特点:表示事务意图在更低层次的对象上加共享锁。当一个事务想要在某个数据对象(如行)上加共享锁时,首先需要在该数据对象的上级对象(如表)上加意向共享锁。意向共享锁之间是兼容的,多个事务可以同时在同一个上级对象上加意向共享锁。
- 应用场景:在数据库进行表级操作时,如果需要对表中的部分行加共享锁,就会先在表上加意向共享锁。例如,在银行转账操作中,涉及到对账户表中的某些账户记录进行读取操作,此时先在账户表上加意向共享锁,然后再对具体的账户记录加共享锁。
意向排他锁(IX锁)
- 特点:表示事务意图在更低层次的对象上加排他锁。与意向共享锁类似,当一个事务想要在某个数据对象上加排他锁时,需先在上级对象上加意向排他锁。意向排他锁与共享锁、意向共享锁不兼容,但意向排他锁之间是兼容的。
- 应用场景:当需要对表中的某些行进行修改操作时,先在表上加意向排他锁,再对具体行加排他锁。比如在社交平台中,当管理员要修改某个用户的重要信息时,先在用户表上加意向排他锁,然后对具体用户记录加排他锁进行修改。