当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-什么是排他锁和共享锁?

金三银四精选java面试题-什么是排他锁和共享锁?

来源:图灵教育
时间:2023-12-05 10:27:11
 

什么是排他锁和共享锁?

排他锁(Exclusive Lock)和共享锁(Shared Lock)是两种常见的数据库锁机制,用于控制对数据的并发访问。

  1. 排他锁(Exclusive Lock):
    • 排他锁是一种独占锁,也称为写锁。当一个事务获取了排他锁后,其他事务无法再获取该数据项的任何锁,包括共享锁和排他锁。
    • 排他锁适用于需要修改数据的操作,它确保在事务修改数据时,其他事务无法读取或修改相同的数据,从而保证了数据的一致性。

用法:SELECT ······ FOR UPDATE;

在查询语句后面添加 FOR UPDATE 语句,MySQL 会对该 SQL 结果集记录添加排它锁,这里边涉及到锁升级情况,如果结果集中无索引,则在表级别添加锁也就是表锁,如果存在索引,则添加行级锁。

  1. 共享锁(Shared Lock):
    • 共享锁是一种共享访问锁,也称为读锁多个事务可以同时获取相同数据项的共享锁,彼此之间不会互斥
    • 共享锁适用于只读操作,它允许多个事务同时读取相同的数据,提高了并发性能。

用法:SELECT ······ LOCK IN SHARE MODE;

在查询语句后面添加 LOCK IN SHARE MODE 语句,MySQL 会对该 SQL 结果集记录添加共享锁,允许其他事务同时读取这些记录。如果其他事务是添加排他锁,则需要等待共享读锁释放后才能继续进行。

排他锁和共享锁之间存在互斥关系,即当一个事务持有排他锁时,其他事务无法获取该数据项的共享锁;同样地,当一个事务持有共享锁时,其他事务无法获取该数据项的排他锁。

X:共享锁;IX:意向共享锁;S:排他锁;IS:意向排他锁;