Mysql 表锁_mysql临键锁

Mysql 表锁_mysql临键锁一.分类: 二.创建示例表: create table mylock( id int not null primary key auto_increment, name varchar(20) )e…

Mysql 表锁

Mysql 表锁_mysql临键锁

 

 

二.创建示例表:

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;

 

三.表锁(偏读)示例

偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定力度大(表锁)发生锁冲突的概率最高,并发度最低。

3.1.读锁:

会话1 

lock table mylock read;

 会话能执行的操作:

1.select * from mylock;

不能执行的操作:

1.update mylock set name=”a2″ where id=1;  不能更新该表

2.select * from dept;        不能查询其他表

Mysql 表锁_mysql临键锁

 

其他会话

可以查询mylock表

不可以更新mylock表(会进入阻塞状态,直到锁释放)

Mysql 表锁_mysql临键锁

 

3.2写锁:

会话1 

lock table mylock write;

 会话能执行的操作:

1.select * from mylock;    可以查询本表

2.update mylock set name=”a2″ where id=1;  更新该表

不能执行的操作:

1.select * from dept;         查询其他表

Mysql 表锁_mysql临键锁

 

其他会话

不能执行任何操作:

1.select * from mylock;

2.update mylock set name =”a3″ where id=1;

 

简而言之:就是读锁会阻塞写,但是不会阻塞读,而写锁会把读和写都阻塞掉

 

看看那些表被加锁了:

mysql>show open tables;

 

如何分析锁锁定:

可以通过查看table_lockes _waited和table_lock_immediate状态变量来分析系统上的表锁定

SQL:show status like “table_locks%”;

Table_locks_immediate:产生表级锁定的次数,表示可以立即获取锁的查询次数,每立即获取锁值加1

Table_locks_waited:出现表级锁定争用而发生等待的次数(不能立即获取锁的次数,每等待一次锁值加1),此值高说明存在严重的表级锁占用情况。

 

此外Myisam的读写锁调度是写优先,这也是myisam不适合做写为主表的引擎。因为写锁后,其他线程无法进行任何操作,大量的更新会使查询很难得到锁,从而造成永久阻塞

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8504.html

(0)
上一篇 2023-02-27
下一篇 2023-02-27

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注