page contents

mysql 的读写锁与并发控制

以下内容希望帮助到大家!

attachments-2020-06-mzvZJ4pv5ed85c9b94e03.png


1.无论何时只要有多个查询在同一时刻修改数据,都会产生并发控制的问题

2.讨论mysql在两个层面,服务器层和存储引擎层,如何并发控制读写

3.举了个mbox邮箱文件的例子,说如果有多个进程同时对mbox文件写东西,那么在文件的末尾会,交叉混乱的添加,比如进程1写了几行,进程2也写了几行,互相交叉,数据就是错误的了.设计良好的mbox需要加锁,比如进程1锁住了文件,进程2必须等待进程1结束,锁释放才能去写.但是这样的话就不支持并发了,同一时刻只有一个进程可以写数据

4.读取时可能也会有问题,比如一个进程正在读数据,另一个进程同时想去删数据,此时就是不安全的;共享锁叫读锁,排他锁叫写锁

5.读锁是共享的,它不会阻塞其他读锁;写锁是排他的,它会阻塞其他读锁和写锁;读读不互斥,读写互斥,写写互斥

6.mysql每时每刻都在发生锁定,当某用户在修改数据时,会阻塞其他用户读取该数据

7.mysql中有两种锁粒度,锁住整张表和锁住表中一行


表锁:当某用户修改数据时,会获取写锁,此时会锁住整张表,其他用户都不能读和写,myisam

行锁:当某用户修改某几行数据,会获取写锁,此时只是锁住那几行,那几行其他用户不能读和写;其他行没有影响,但是管理锁会消耗资源,innodb


8.使用命令来锁表
unlock tables 解锁所有行
lock tables 表名 read或者write


测试读写/写读互斥

1.增加读锁

attachments-2020-06-vMSvDiuG5ed99afb2ab95.png

读数据没影响,写数据会被阻塞住

attachments-2020-06-xZOE9WaA5ed99b0211f13.png

2.增加写锁

attachments-2020-06-RFgqTmEc5ed99b087d7cc.png

读和写都会被阻塞

attachments-2020-06-mloaHyr05ed99b0e1d36f.png



attachments-2020-06-t3EJE8hb5ed85cec9adbc.jpg

  • 发表于 2020-06-04 10:30
  • 阅读 ( 487 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章