MySQL锁总体结构
MySQL 的锁上可以分成三类:总体、类型、粒度。
- 总体上分成两种:乐观锁和悲观锁
- 类型上也是两种:读锁和写锁
- 锁的粒度上可以分成五种:表锁,行锁,页面锁,间隙锁,临键锁
下面我们就来详细讲一下这些锁
1. 悲观锁
悲观锁对于数据库中数据的读写持悲观态度,即在整个数据处理的过程中,他会悲观认为数据不会保持一致性,所以是会将相应的数据锁定。在数据库中,悲观锁的实现是依赖数据库提供的锁机制。
如果加上了悲观锁,那么就无法对这些数据进行读取操作。
2. 乐观锁
乐观锁对于数据库的数据的读写持乐观态度,即在整个数据处理的过程中,他会很乐观的认为数据会保持一致性,所以不加锁,而是通过数据版本记录机制实现。
MySQL中的MVCC多版本控制就是乐观锁的一种实现方式。
- 往往会在数据表中增加一个类型version的版本号字段。
- 在查询数据库中的数据时,会将版本号字段的值一起读取出来。
- 当更新数据时,会令版本号字段的值加1。将提交数据的版本与数据库表对应记录的版本进行对比。
- 如果提交的数据版本号大于数据表中当前要修改的数据的版本号,则数据进行修改操作。