MySql高级技术-锁

数据库锁理论

Posted by LQFGH on January 16, 2019

对数据操作的类型

  • 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。
  • 写锁(排他锁):当前写操作没有完成前,它会阻断其他写锁和读锁。

对数据操作的粒度

  • 表锁:偏向 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开始执行)

结论

行锁