1、MySQL锁介绍
MyISAM和MEMORY存储引擎采取的是表级锁
InnoDB既支持表级锁,又支持行级锁,但默认是行级锁。
表级锁:开销小,加锁快,不会死锁。锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢,也会死锁。锁定粒度大,发生锁冲突的概率最高,并发度最低。
页面锁:开销和加锁时间,锁定粒度,介于表级行级锁中间,也会死锁。并发度一般。
表级锁适合以查询为主,只有少量按索引条件更新数据的应用。
行级锁适合有大量按索引条件并发,更新少量数据,同时又有并发查询的应用。
2、MySQL表级锁
2.1、表级锁介绍
由MySQL SQL layer层实现。
MySQL的表级锁有两种:
一种是表锁。一种是元数据锁(meta data lock,MDL)。
show status like 'table%;
-- able_locks_immediate:产生表级锁定的次数;
-- able_locks_waited:出现表级锁定争用而发生等待的次数
2.2、表锁介绍
2.2.1 表现模式形式:
表共享读锁(Table Read Lock)
表独占写锁(Table Write Lock)
2.2.2 手动增加表锁
lock table 表名称 read(write),表名称2 read(write);
2.2.3 查看表锁情况
show open tables;
2.2.4 删除表锁
unlock table;
2.3 表锁演示
2.3.1环境准备
-- 新建表
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 INT