图文实践详解 Mysql 读写锁。

准备

创建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中查询会阻塞

总结

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java