IS锁(意向共享锁,Intention Shared Lock):
定义:IS锁是一种表级锁,它表明一个事务打算在表中的某些行上获取共享锁(S锁)。共享锁允许事务对数据进行读取操作,并且允许多个事务同时持有同一数据行的共享锁,因为读取操作通常不会修改数据,所以可以并发执行。
用途:当事务执行诸如 SELECT… LOCK IN SHARE MODE 这样的语句时,会首先获取表的IS锁。这是为了告知其他事务,本事务即将对表中的某些行加共享锁。这样,在进行行级锁操作之前,通过表级的IS锁可以避免与其他事务对表的锁操作产生冲突。例如,多个事务可能同时读取表中的不同行,通过IS锁可以协调这些操作,提高并发性能。
IX锁(意向排他锁,Intention Exclusive Lock):
定义:IX锁同样是表级锁,它表示一个事务打算在表中的某些行上获取排他锁(X锁)。排他锁用于对数据进行修改操作,并且同一时间只允许一个事务持有某数据行的排他锁,以防止其他事务同时修改该数据,保证数据的一致性。
用途:当事务执行 SELECT… FOR UPDATE 语句时,会先获取表的IX锁。这就向其他事务表明本事务即将对表中的某些行加排他锁进行修改操作。例如,在银行转账事务中,为了保证账户余额修改的原子性和一致性,在对相关账户数据行加排他锁之前,先获取表的IX锁,防止其他事务在此时对表进行可能冲突的锁操作。