MySQL的锁机制

MySQL的锁机制比较简单,其最 显著的特点是不同的存储引擎支持不同的锁机制。

MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);
InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。
在这里插入图片描述在这里插入图片描述

lock table tbl_name read/write;
unlock tables;

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

lock table tbl_name read local; (其它会话可以插入数据)
unlock tables; (在锁释放前,无法读取其它会话插入的数据)

可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺:

show status like 'table%';
--如果Table_locks_waited的值比较高,则说明存在着较严重的表级锁争用情况。

MySQL的锁机制_第1张图片MySQL的锁机制_第2张图片

可以通过检查InnoDB_row_lock状态变量来分析系统上的行锁的争夺情况:

show status like 'innodb_row_lock%';
--如果发现锁争用比较严重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比较高

MySQL的锁机制_第3张图片在这里插入图片描述
1、 在不通过索引条件查询的时候,innodb使用的是表锁而不是行锁
2、 在通过索引进行条件查询,innodb使用的是行锁
3、 由于mysql的行锁是针对索引加的锁,不是针对记录加的锁,所以对于非唯一索引,即使访问不同行的记录,也无法访问到具体的数据

你可能感兴趣的:(MySQL)