MySQL中行锁、页锁和表锁的简朴引见【MySQL教程】,mysql
行锁
1、行锁的锁定颗粒度在MySQL中是最细的,运用于InnoDB存储引擎,只针对操纵确当前行举行加锁。并发状况下,发作锁守候的几率较低,支撑较大的并发数,但开支大,加锁慢,而且会涌现死锁。
2、在InnoDB中运用行锁有一个前提前提:检索数据时须要经由过程索引!由于InnoDB是经由过程给索引的索引项加锁来实现行锁的。
3、在不经由过程索引前提查询的时刻,InnoDB会运用表锁,这在并发较大时,能够致使大批的锁争执。另外,行锁是针对索引加锁,存在这类状况,虽然是接见的差别纪录,但运用的是统一索引项,也能够会涌现锁争执。
提醒:不一定运用了索引检索就一定会运用行锁,也有能够运用表锁。由于MySQL会比较差别执行计划的价值,当全表扫描比索引效力更高时,InnoDB就运用表锁。因而须要连系SQL的执行计划去剖析锁争执。
4、行锁会发作死锁,由于在行锁中,锁是逐渐取得的,重要分为两步:锁住主键索引,锁住非主键索引。如:当两个事件同时执行时,一个锁住了主键索引,在守候其他索引;另一个锁住了非主键索引,在守候主键索引。如许便会发作死锁。InnoDB平常都能够检测到这类死锁,并使一个事件开释锁回退,另一个猎取锁完成事件。
表锁
表锁的锁定颗粒度在MySQL中是最粗的,InnoDB、MyISAM引擎中都有运用,对当前整张表加锁。不适合高并发的场景,但开支小,加锁快,不会涌现死锁,发作锁争执的几率最大。
页锁
页锁的粒度介于行锁和表锁之间,运用于BDB引擎,并发度平常,开支和加锁速率也介于行锁和表锁之间。
以上就是MySQL中行锁、页锁和表锁的简朴引见的细致内容,更多请关注ki4网别的相干文章!