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.增加读锁
![1373c165268d5927f5d1ea2e89772e08.png](https://i-blog.csdnimg.cn/blog_migrate/43223784cfe871870529d7c8a0f3cda7.png)
读数据没影响,写数据会被阻塞住
![0ccb77de604ef2d24d51568d15c72b92.png](https://i-blog.csdnimg.cn/blog_migrate/fdbfbc862ba1c54c7db54467d61e60fe.png)
2.增加写锁
![da78f0240acad7297f1916a36ed0345a.png](https://i-blog.csdnimg.cn/blog_migrate/b91dd21149eac8f3887aed6e7ce53e6a.png)
读和写都会被阻塞
![38d5608269c22f622bd0a66f27b2a896.png](https://i-blog.csdnimg.cn/blog_migrate/27010561d5765823a07978779b9baba3.png)
以上内容希望帮助到大家,更多PHP大厂PDF,PHP进阶架构视频资料,PHP精彩好文可以关注公众号:PHP开源社区 或者访问:
四年精华PHP技术文章整理合集——PHP框架篇
四年精华PHP技术文合集——微服务架构篇
四年精华PHP技术文合集——分布式架构篇
四年精华PHP技术文合集——高并发场景篇
四年精华PHP技术文章整理合集——数据库篇
作者:陶士涵的菜地
来源:https://www.cnblogs.com/taoshihan/p/10653931.html