什么是排他锁和共享锁?
排他锁(Exclusive Lock)和共享锁(Shared Lock)是两种常见的数据库锁机制,用于控制对数据的并发访问。
- 排他锁(Exclusive Lock):
-
- 排他锁是一种独占锁,也称为写锁。当一个事务获取了排他锁后,其他事务无法再获取该数据项的任何锁,包括共享锁和排他锁。
- 排他锁适用于需要修改数据的操作,它确保在事务修改数据时,其他事务无法读取或修改相同的数据,从而保证了数据的一致性。
用法:SELECT ······ FOR UPDATE;
在查询语句后面添加 FOR UPDATE 语句,MySQL 会对该 SQL 结果集记录添加排它锁,这里边涉及到锁升级情况,如果结果集中无索引,则在表级别添加锁也就是表锁,如果存在索引,则添加行级锁。
- 共享锁(Shared Lock):
-
- 共享锁是一种共享访问锁,也称为读锁。多个事务可以同时获取相同数据项的共享锁,彼此之间不会互斥。
- 共享锁适用于只读操作,它允许多个事务同时读取相同的数据,提高了并发性能。
用法:SELECT ······ LOCK IN SHARE MODE;
在查询语句后面添加 LOCK IN SHARE MODE 语句,MySQL 会对该 SQL 结果集记录添加共享锁,允许其他事务同时读取这些记录。如果其他事务是添加排他锁,则需要等待共享读锁释放后才能继续进行。
排他锁和共享锁之间存在互斥关系,即当一个事务持有排他锁时,其他事务无法获取该数据项的共享锁;同样地,当一个事务持有共享锁时,其他事务无法获取该数据项的排他锁。
X:共享锁;IX:意向共享锁;S:排他锁;IS:意向排他锁;
![](/images/780-200-2.jpg)