MySQL面试之InnoDB的行锁是怎么实现的? |
您所在的位置:网站首页 › mysql行锁和表锁怎么实现 › MySQL面试之InnoDB的行锁是怎么实现的? |
InnoDB行锁是通过索引数据页的记录加锁实现的。具体实现的算法有3中:Record Lock, Cap Lock,Next-key Lock. RecoreLock锁:锁定单个行记录的锁。(记录锁,RC,RR隔离级别都支持) CapLock锁:间隙锁,锁定索引记录间隙,确保索引记录的间隙不变。(RR隔离级别支持) Next-key Lock 锁: 记录锁和间隙锁组合,同时锁住数据,并且锁住数据前后范围。(记录锁+范围锁,RR隔离级别都支持) 在RR隔离级别:InnoDB对于记录加锁都是先采用 Next-Key Lock ,但是当SQL操作含有唯一索引时,Innodb对于Next-Key Lock 进行优化,降级为 RecordLock, 仅锁住索引本身非为范围。 1)select ... from 语句:InnoDB引擎采用MVCC机制实现非阻塞读,所以对于普通的select语句,InnoDB不加锁 2)select ... from lock in share mode语句:追加了共享锁,InnoDB会使用Next-Key Lock锁进行处理,如果扫描发现唯一索引,可以降级为RecordLock锁。 3)select ... from for update语句:追加了排他锁,InnoDB会使用Next-Key Lock锁进行处理,如果扫描发现唯一索引,可以降级为RecordLock锁。 4)update ... where 语句:InnoDB会使用Next-Key Lock锁进行处理,如果扫描发现唯一索引,可以降级为RecordLock锁。 5)delete ... where 语句:InnoDB会使用Next-Key Lock锁进行处理,如果扫描发现唯一索引,可以降级为RecordLock锁。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |