MySQL锁

按照锁的粒度来说,MySQL主要包含三种类型(级别)的锁定机制:

- 全局锁:锁的是整个database。由MySQL的SQL layer层实现的
- 表级锁:锁的是某个table。由MySQL的SQL layer层实现的
- 行级锁:锁的是某行数据,也可能锁定行之间的间隙。由某些存储引擎实现,比如InnoDB。

  

表级锁和行级锁的区别:

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;

  

MySQL表级锁

由MySQL SQL layer层实现,一种是表锁。一种是元数据锁(meta data lock,MDL)。

MySQL 实现的表级锁定的争用状态变量:

 show status  like 'table%';

  

 

- table_locks_immediate:产生表级锁定的次数;
- table_locks_waited:出现表级锁定争用而发生等待的次数;

  

表锁有两种表现形式:

表共享读锁(Table Read Lock)
表独占写锁(Table Write Lock)

  

手动增加表锁

lock table 表名称 read(write),表名称2 read(write),其他;

  

查看表锁情况

show open tables;

  

删除表锁

unlock tables;

  

 实例:

CREATE TABLE mylock (
id int(11) NOT NULL AUTO_INCREMENT,
NAME varchar(20) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO mylock (id,NAME) VALUES (1, 'a');
INSERT INTO mylock (id,NAME) VALUES (2, 'b');
INSERT INTO mylock (id,NAME) VALUES (3, 'c');
INSERT INTO mylock (id,NAME) VALUES (4, 'd');

  

 

posted on 2019-05-29 16:50  乌云上  阅读(130)  评论(0编辑  收藏  举报

导航