ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL锁机制

2019-07-21 11:54:31  阅读:183  来源: 互联网

标签:INSERT lock INTO innodb MySQL test VALUES 机制


一、锁的分类

对数据操作的类型:读锁(共享锁)、写锁(排它锁)

对数据操作对粒度:表锁、行锁

二、表锁(偏读)

特点:偏向MyISAM存储引擎,开销小,加锁快,无死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。

MyISAM在执行查询语句前,会自动给涉及的所有表加读锁,在执行增删改操作前,会自动给涉及的表加写锁。

对MyISAM表加读锁,不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求,读锁释放才会执行其他进程的写操作

对MyISAM表加写锁,会阻塞其他进程对同一表的读和写操作,只有当写锁释放,才会执行其他的进程的读写操作。

即读锁会阻塞写,但不会阻塞读,写锁则会阻塞读和写。

建表语句

create table mylock(
id int not null primary key auto_increment,
name varchar(20)
)engine myisam;

insert into mylock(name) values('a');
insert into mylock(name) values('b');
insert into mylock(name) values('c');
insert into mylock(name) values('d');
insert into mylock(name) values('e');

select * from mylock;  
lock table mylock read,tbl_dept write; #手动增加表锁
show open tables; #查看表上加过的锁
unlock tables; #解锁

show status like 'table%';  #分析系统表锁定
#Table_locks_immediate  产生表级锁定的次数    
#Table_locks_waited表级锁定争用而发生的等待次数,此值很高,说明存在严重的表级锁争用情况

 

三、行锁(偏写)

特点:偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

InnoDB:支持事务,采用了行级锁 

建表语句

CREATE TABLE test_innodb_lock(
a int(11),
b VARCHAR(16)
)ENGINE=INNODB;

INSERT INTO test_innodb_lock VALUES(1,'b2');
INSERT INTO test_innodb_lock VALUES(3,'3');
INSERT INTO test_innodb_lock VALUES(4,'4000');
INSERT INTO test_innodb_lock VALUES(5,'5000');
INSERT INTO test_innodb_lock VALUES(6,'6000');
INSERT INTO test_innodb_lock VALUES(7,'7000');
INSERT INTO test_innodb_lock VALUES(8,'8000');
INSERT INTO test_innodb_lock VALUES(9,'90000');
INSERT INTO test_innodb_lock VALUES(1,'b1');

CREATE INDEX idx_test_innodb_a ON test_innodb_lock(a);
CREATE INDEX idx_test_innodb_b ON test_innodb_lock(b);

SELECT * from test_innodb_lock;

1、行锁定基本演示

  

2、无索引行锁升级为表锁

3、什么是间隙锁:

当用范围条件而不是相等条件检索数据,并请求共享或排他锁,InnoDB会给符合条件的已有数据记录的索引项加锁。

对于键值在条件范围内但并不存在的记录,叫做“间隙”。

 

4、如何锁定一行?

 

 5、行锁分析

show status like 'innodb_row_lock%';
#Innodb_row_lock_current_waits:当前正在等待锁定的数量
#Innodb_row_lock_waits:等待总次数
#Innodb_row_lock_time:等待总时长
#Innodb_row_lock_time_avg:等待平均时长

  

标签:INSERT,lock,INTO,innodb,MySQL,test,VALUES,机制
来源: https://www.cnblogs.com/wjh123/p/11219477.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有