乐趣区

关于数据库:Mysql读写锁保姆级图文教程

摘要: 读锁会阻塞写,然而不会阻塞读,而写锁会把杜希俄都阻塞。

本文分享自华为云社区《Mysql 保姆级读写锁图文教程丨【绽开吧!数据库】》,作者:Code 皮皮虾。

筹备

 创立 mylock 表
CREATE TABLE `mylock` (`id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;【手动减少表锁】lock table 表名字 1 read(write),表名字 2 read(write),其它;【查看表上加过的锁】show open tables;【开释表锁】unlock tables;

读锁

读锁 (共享锁):针对同一份数据,多个读操作能够同时进行而不会相互影响。

共享锁又称为读锁,简称 S 锁,顾名思义,共享锁就是多个事务对于同一数据能够共享一把锁,都能拜访到数据,然而只能读不能批改。

1. 运行 show open tables,可见 In_use 全为 0 即没有加过锁, 为 1 示意有锁。

2. 运行 lock table mylock read,lagou write 加锁后,show open tables 可见加锁胜利。

3. 开启两个查问,在 session1 加读锁 lock table mylock read

都可查问胜利。

4. 在 session2 读任何表都不会受影响

5. 在 session1 中查问其余表或更新表都不行。

6. 在 session2 中更新表,则会阻塞。

写锁

写锁(排它锁):以后写操作没有实现前,它会阻断其余写锁和读锁。

排他锁又称为写锁,简称 X 锁,顾名思义,排他锁就是不能与其余所并存,如一个事务获取了一个数据行的排他锁,其余事务就不能再获取该行的其余锁,包含共享锁和排他锁,然而获取排他锁的事务是能够对数据就行读取和批改。

先 unlock tables 开释锁,再在 session1 运行 lock table mylock write 加写锁

1. 在 session1 中更新胜利

但查问失败

2. 在 session2 中查问会阻塞

总结

Mylsam 在执行查问语句(select)前,会主动波及的所有表加读锁,在执行增删改操作前,会主动给波及的表加写锁。

MYSQL 的表级锁有两种模式:
1. 表共享读锁(Table Read Lock)
2. 表共享写锁(Table Write Lock)

论断:

1、对 MyLSAM 表的读操作(加读锁),不会阻塞其余线程对同一表的读申请,但会阻塞对同一表的写申请,只有当读锁开释后,才会执行其余过程的写操作。

2、对 MyLSAM 表的读操作(加读锁),会阻塞其余线程对同一表的读和写操作,只有当写锁开释后,才会执行其余过程的读写操作。

简而言之,就是读锁会阻塞写,然而不会阻塞读,而写锁会把杜希俄都阻塞。

点击关注,第一工夫理解华为云陈腐技术~

退出移动版