使用两个客户端进行模拟两个session
首先创建表 mylock 并插入两条数据
加锁命令
mysql> lock table mylock read;
解锁命令
mysql> unlock tables;
加read锁(共享锁)锁之后当前session和其他session对数据库的操作影响
session-1 |
session-2(其他session) |
对mylock进行锁定 |
连接终端 |
当前session可以查询该表记录 |
其他session也可以查询该表记录 |
当前session不可以查询其他没有锁定的表 |
其他session可以查询其他没有锁定的表 |
当前session中插入或更新锁定的表都会提示错误 |
其他session插入或更新锁定的表会一直等待获得锁 |
释放锁 |
其他session获得锁,插入操作完成 |
加write锁(写锁)锁之后当前session和其他session对数据库的操作影响
session-1 |
session-2(其他session) |
对mylock进行锁定 |
连接终端 |
当前session可以查询,更新该表都可以执行 |
其他session查询或插入或更新锁定的表会一直等待获得锁 |
释放锁 |
其他session获得锁,查询或插入操作完成 |
简而言之,就是读锁会阻塞写,但是不会阻塞读,而写锁会把读和写都阻塞。