对数据操作的类型
- 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。
- 写锁(排他锁):当前写操作没有完成前,它会阻断其他写锁和读锁。
对数据操作的粒度
- 表锁:偏向
MyISAM
存储引擎,开销小,加锁块;无死锁;锁定粒度大,发生冲突的概率最高,并发度最低。
表锁
锁的操作
加锁
1
LOCK TABLE emp READ,dept WRITE;
查看锁
1
show open tables;
查看库中表的资源竞争情况
1
SHOW STATUS LIKE 'table%';
红色部分是产生资源竞争的次数
释放锁
1
unlock tables;
读锁的理论(MyISAM引擎)
当session1在表上加读锁
情况 | 是否可以操作 |
---|---|
session1是否可以读自己 | 可以 |
session1是否可以写自己 | 不可以 |
session2是否可以读session1 | 可以 |
session1是否可以读加锁外的其他表 | 不可以 |
session2是否可以写session1 | 阻塞(当session1解锁是,session开始执行) |
写锁理论(MyISAM引擎)
当session1在表上加写锁
情况 | 是否可以操作 |
---|---|
session1是否可以读自己 | 可以 |
session1是否可以写自己 | 可以 |
session1是否可以读加锁表之外的其他表 | 不可以 |
session2是否可以读session1 | 阻塞(当session1解锁是,session开始执行) |
session2是否可以写session1 | 阻塞(当session1解锁是,session开始执行) |