MySQL的锁机制
通常有
-
行锁
行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。有可能会出现死锁的情况。 -
表锁
表级锁是mysql锁中粒度最大的一种锁,表示当前的操作对整张表加锁,资源开销比行锁少,不会出现死锁的情况,但是发生锁冲突的概率很大。 -
页锁
页级锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。
常见的执行引擎对这两种锁的支持
实现方式
InnoDB行锁是通过给索引上的索引项加锁
来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。
InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!
根据使用方式,行锁和表锁都可分为
-
共享锁(读锁):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。
-
排它锁(写锁):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。