MySQL_MySQL锁机制之写锁操作

1.引入

   上一节课,我们呢,查看了在对一个表添加读锁,然后在不同的会话中查看对数据的不同操作,可以发现读锁在读取的时候可以共享数据,写的时候阻塞。那么下面呢。我们就一起来看看添加写锁又会有什么样子的变化呢?

 

2.写锁案例讲解

(1).数据库表内容准备

DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(10) NOT NULL,
  `password` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=myisam DEFAULT CHARSET=utf8;
 
 
 
//注意这一个数据表的引擎是myisam

添加数据内容并查看

(2).给数据库表admin添加一个写锁(在会话1中)

lock table admin write;

(3).操作数据库表内容

会话1中进行对加锁数据表的读取操作,发现可以读取。

在会话1中进行对加锁数据表修改操作,发现可以进行操作。

在会话1中去读取其他数据表的内容,发现不可以,因为加锁的数据库表的栈没有清除。

会话2读取其他数据表内容,发现可以读取。

会话2读取加锁数据库表内容,发现处于阻塞状态,然后在会话1中取消加锁,立刻执行查询操作。

会话2进行其他操作的时候都不能够进行其他的操作。

 

3.总结

通过上面的操作,我们可以把读锁和写锁的操作总结如下:

        读锁会阻塞写,但是不会堵塞读取操作。写锁会把读操作和写操作都堵塞。

 

4.读写锁的其他相关操作

(1).查看哪些被加了锁

show open tables;

//有1的就是被加了锁。

(2).如何分析表锁定

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

SQL:show status like 'table%';

由于我们的admin数据库表使用是是Myisam引擎,那么Myisam的读写调度是写优先,这也就是Myisam不适合作为写为主的主表的引擎,因为添加写锁以后,其他的线程不能够做任何的操作,大量的更新会使得查询很难得到锁,进而造成永远阻塞

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔笛手7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值