概念
表锁
- 表锁是
最粗粒度的锁,它锁定整个数据库表,而不是表中的特定行或数据。 - 当一个事务获取了一个表锁时,其他事务将无法访问整个表,直到持有表锁的事务释放它。
- 表锁适用于少量并发访问表的情况,通常
不建议在高并发环境下使用,因为它会导致性能瓶颈和阻塞。
行锁
- 行锁是
更细粒度的锁,它允许事务锁定表中的特定行或一组行,而不是整个表。 - 不同的事务可以同时锁定不同行,因此
行锁更适合高并发的情况。 - 行锁通常会在读取和修改行数据时使用,以防止其他事务同时修改相同的行。
意向锁
- 意向锁是一种
辅助锁,用于指示事务将在表或行上放置锁。 - 当一个事务在行上放置了行锁时,会发出一个意向锁,告诉其他事务它打算在该表上放置锁。
- 意向锁有两种类型:
意向共享锁(IS)和意向排他锁(IX)。
间隙锁
-
间隙锁是行级锁的一种,它
用于锁定范围内的行,而不仅仅是单个行。 -
间隙锁可以
用来防止其他事务在范围内插入新行,从而避免幻读问题。当一个事务读取一个范围内的行时,其他事务不能在该范围内插入新行。
应用场景
-
表锁
适用于稀少的写操作和大量的读操作的情况。例如,在只读取数据的报表生成系统中可以使用表锁。 -
行锁
适用于高并发的系统,其中多个事务需要并发访问同一表中的不同行。例如,在在线销售系统中,多个用户可以同时浏览和购买不同的商品 -
意向锁用于
协调并发事务的锁定操作,以防止冲突和死锁。它们通常不直接由开发人员管理,而由数据库管理系统自动处理 -
间隙锁通常用于解决幻读问题,幻读是指在事务执行期间,另一个事务插入了新行,导致第一个事务看到了事务开始时不存在的数据。通过使用间隙锁,数据库可以锁定范围,防止其他事务插入新的行,从而解决幻读问题