mysql——innodb锁机制

锁的类型

数据库使用锁是为了支持更好的并发,提供数据的完整性和一致性。InnoDB是一个支持行锁的存储引擎,锁的类型有:共享锁(S)、排他锁(X)、意向共享(IS)、意向排他(IX)。

一致性非锁定读

为了提供更好的并发,InnoDB提供了一致性非锁定读:不需要等待访问行上的锁释放,读取行的一个快照。快照数据是指该行的之前版本的数据。该实现是通过undo段来实现的,而undo用来在事务中回滚数据,因此快照数据本身没有额外的开销。

该方法是通过InnoDB的一个特性:MVCC来实现的。

一致性锁定读

select * from … for update

锁的算法

  1. Record Lock:单个行记录上的锁。
  2. Gap Lock:间隙锁,锁定一个范围,但不包括记录本身。GAP锁的目的,是为了防止同一事务的两次当前读,出现幻读的情况。
  3. Next-Key Lock:1+2,锁定一个范围,并且锁定记录本身。对于行的查询,都是采用该方法,主要目的是解决幻读的问题。