- 锁目的
- 解决并发情况下资源抢夺问题, 维护数据的⼀一致性
- mysql的锁虽然开发者可以⼿手动设置, 但⽐比较影响并发性, ⼀一般会 使⽤用
乐观锁代替 ( 如Django中
到库存问题) - 由于mysql会⾃自动使⽤用锁, 所以需要了了解锁机制, 以便便优化数据库并发能⼒力力
- 粒度/覆盖范围
- 表级锁
- 对整个表锁定, 并发差, 资源消耗少
- 行级锁
- 对数据⾏行行锁定, 并发好, 资源消耗多
- 不同数据库引擎⽀支持的锁也不不同
- MyISAM (5.5之前默认) ⽀支持表级锁
- InnoDB ⽀支持⾏行行级锁和表级锁
- 表级锁
- 锁和事务
- ⽆无论操作是否在事务中, 都可以获取锁, 只不不过在事务中, 获取的锁只有执⾏行行完事务才会释放
- MyISAM
- 只⽀支持表级锁
- 表读锁/共享锁
- 获取后, 其他请求可以读不不能写
- 表写锁/排它锁
- 获取后, 其他请求既不不能读也不不能写
- 加锁⽅方式
- 数据库⾃自动管理理, SELECT前给涉及的表添加读锁, 更更新前(增删改)给涉及的表加写锁