Allin Program

MySQL 的锁

数据库锁设计的初衷是处理并发问题。
作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。

根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。

全局锁

全局锁就是对整个数据库实例加锁,命令:

-- 加锁,因为该命令一般也被叫做FTWRL
Flush tables with read lock

-- 解锁(会话断开时,全局锁会被自动释放)
unlock tables

加全局锁后,其他线程的以下语句会被阻塞:

  1. 数据更新语句(数据的增删改);
  2. 数据定义语句(包括建表、修改表结构等;
  3. 更新类事务的提交语句。

比如此时执行delete语句,会返回:

Error Code: 1223. Can't execute the query because you have a conflicting read lock

待续...