本文主要介绍Mysql的数据库引擎基本概念、着重介绍InnoDB中的各种锁操作原理和场景、数据库事务隔离级别;供大家参考选择,尤其是写后端代码一定离不开数据库的应用场景,多对数据库底层了解才能掌控好架构、掌控系统的平滑稳定、对自身技术实力的增长一定看源码!源码!源码!在 Mysql 中,行级锁并不是直接锁记录,而是锁索引。
索引分为主键索引和非主键索引两种,如果一条sql 语句操作了主键索引,Mysql 就会锁定这条主键索引;如果一条语句操作了非主键索引,MySQL会先锁定该非主键索引,再锁定相关的主键索引。
InnoDB 行锁是通过给索引项加锁实现的,如果没有索引,InnoDB 会通过隐藏的聚簇索引来对记录加锁。如果不通过索引条件检索数据,那么InnoDB将对表中所有数据加锁,实际效果跟表锁一样。因为没有了索引,找到某一条记录就得扫描全表,要扫描全表,就得锁定表。