InnoDB存储引擎的锁有两种,一种是表锁(table-level locking),一种是行锁(row-level locking),默认是行锁,你说的三种算法是指行锁算法: 1) Record Lock:单个行记录上的锁 2) Gap Lock:间隙锁,锁定一个范围,但不包含记录本身 3) Next-Key Lock:Gap Lock+Record Lock,锁定一个范围,并且锁定记录本身。 这个可以参考这篇文档 https://www.jianshu.com/p/f3868e608c8c
而表锁的算法则不同,分为写锁和读锁, 写锁的实现机制是,如果在表上没有锁(读锁或写锁),则在表上加一个写锁,否则就把写锁请求放在写锁队列中。 读锁的实现机制是,如果在表上没有写锁,把一个读锁定放在它上面,否则就把读锁请求放在读锁定队列中。 当一个锁被释放时,写锁队列中的线程会优先获取写锁,读锁队列中的线程则是后获取锁,这意味着,如果一个表上有许多更新,SELECT语句将一直等待,知道没有新的写请求。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。