什么是锁:
易于理解的方式,就是在并发操作的情况下,一个用户对数据库中数据进行操作时把他锁住,防止别的用户也在此时对该数据进行操作,这样最终更新的数据不是完整的,不能记录两个用户做的更新。
锁的分类:
锁的分类分为两种方式,可以分为悲观所、乐观锁,也可以分成排他锁,共享锁和更新锁。
具体分类结构:
悲观锁{排他锁、共享锁、更新锁}
乐观锁
悲观锁:
也称之为互斥锁。字面理解,是一种消极的锁,就是在用户从数据库拿数据的时候就会认为在此期间一定有别的用户也会拿这条数据,所以每次拿数据的时候都会给数据上锁,防止别的用户在此期间对此条数据更改。
悲观锁通常是依靠数据库本身提供的锁机制来实现的。
乐观锁:
与悲观锁相对应,是一种积极的锁,在用户从数据库中拿数据的时候认为在此期间一定不会有别的用户对这条数据进行操作,所以在每次拿数据的时候不会给数据上锁,但这样如何保证数据库的完整性和一致性呢?就是在对数据进行更新的时候判断,数据库中的数据和自己读出来的数据是否相同:)实现方式有三种:
- 通过版本号控制:在每个数据结构中加入版本号标识,每个用户对数据进行操作的时候要对版本号进行+1然后更新
- 通过时间戳控制:在每次对数据更新的时候同时更新时间戳
- 通过待更新字段控制:每次更新的时候判断数据库中的待更新数据和自己取出来的待更新数据是否相同