MySQL支持的锁
从锁粒度上划分
表级锁 行级锁(InnoDB存储引擎) 页级锁(BDB存储引擎)
从锁操作上划分
使用场景
修改表结构
修改数据库表结构会自动加表级锁(元数据锁)
行级锁升级表级锁
更新数据未使用索引 行级锁会上升为表级锁
MySQL锁分类
分为乐观锁和悲观锁
乐观锁
乐观锁是程序通过版本号或时间戳实现
悲观锁
表级锁
每次操作锁住整个表 锁定力度大 发生锁冲突的概率最高 并发度最低 应用在MyISAM、InnoDB、BDB等存储引擎中
表级锁又分为表锁(MySQL layer层加锁) 元数据锁(MySQL layer层加锁) 意向锁(InnodB存储引擎层加锁) 内部使用的锁
表锁
需要手动加锁
- read lock
加读锁后还可以加读锁 不能加写锁
- write lock
加写锁后不能加读锁也不能加写锁
元数据锁
自动加锁 元数据其实就是表结构
意向锁
行级锁
每次操作锁住一行数据 锁定粒度最小 发生锁冲突的概率最低 并发读最高 是由InnoDB存储引擎实现的