关于 MySQL 中的各种锁


前言

关于 MySQL 中的各种锁-每日运维


关于 MySQL 中的各种锁-每日运维

本篇文章已收录到 GitHub 仓库 https://github.com/logerJava/loger

关于 MySQL 中的各种锁-每日运维

关于 MySQL 中的锁, 如果是在小型项目开发中, 或在学习阶段很可能会忽略锁的问题, 也很少在主动去加锁, 这种情况一般都是被业务场景所限制的, 如果有做过库存方面对数据库数量要求十分严格的业务场景的话, 就应该对这些锁并不陌生 . 然而事实上一般情况下确实不需要太去了解 MySQL 锁方面的知识程序也会跑的很好, 这是因为数据库已经隐式的帮我们加好了锁, 但是这只是一般情况, 不论是为了以后业务场景的扩展, 还是自己知识的深度, 我们都有必要去学习 MySQL 中锁相关的知识 .


MySQL 中锁的分类

关于 MySQL 中的各种锁-每日运维


我们在前面的 MySQL - 基础概念 中有简单提到过锁的分类, 因为不同的存储引擎支持的锁机制是不同的, 我们这里主要以 MyISAM 和 InnoDB 进行解析

需要注意的是 MyISAM 存储引擎仅支持表锁, InnoDB存储引擎既支持行级锁,也支持表级锁,但默认情况下是采用行级锁

1

MyISAM 中的表锁



MyISAM 中的表锁可以分为两种 :

  • 表共享读锁 (Table Read Lock)

    • 不会阻塞其他用户对同一张表的读请求,但是会阻塞对同一张表的写请求

  • 表独占写锁 (Table Write Lock)

    • 会阻塞其他用户对同一张表的读写操作