MySQL的锁主要有行锁和表锁两种。
行锁又分为共享锁(S锁)和排他锁(X锁)。一般的select语句,InnoDB不加任何锁,我们称之为快照读。通过加S锁和X锁的select语句或者插入/更新/删除操作,我们称之为当前读。特殊的说明是,以上的当前读,读取的都是记录的最新版本。行锁是MySQL的一种高级锁定方式,它是针对索引字段加的锁,只有通过索引条件来检索数据,才能使用行级锁,否则,直接使用表级锁。
表锁,MySQL的表级锁有两种模式:表共享读锁 (Table Read Lock)和表独占写锁(Table WritLock )。对 MyISAM 表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同表的写请求;对 MyISAM 表的写操作,则会阻塞其他用户对同一表的读和写操作。表锁是MySQL的一种基本锁定方式,对于非索引字段的锁定,InnoDB会使用表锁。
总的来说,行锁和表锁都是MySQL用来保证数据一致性和完整性的机制,但行锁的锁定粒度更小,对应的并发度更高,而表锁的锁定粒度更大,对应的并发度更低。