按照锁粒度进行划分
1. 页锁,页的粒度上进行锁定。
2. 表锁,对数据表进行锁定,锁定粒度很大,同时发生锁冲突的概率也会较高,数据访问的并发度低。不过好处在于对锁的使用开销小,加锁会很快。
3. 行锁,按照行的粒度对数据进行锁定。锁定力度小,发生锁冲突概率低,可以实现的并发度高,但是对于锁的开销较大,加锁较慢,容易出现死锁。
从数据库管理的角度对锁进行划分
共享锁
* 读锁,S锁,共享锁的资源可以被其它用户读取,但是不能修改。
排它锁
* 独占锁,写锁,X锁。锁定的数据只允许进行锁定的操作的事务使用,其它事务无法使用。
共享锁会发生死锁的情况
* 多个事务对同一数据获取读锁的时候,可能会出现死锁的情况。
从程序员的角度进行划分
* 乐观锁,认为对同一数据的并发操作不会总发生,属于小概率事件,不用每次都对数据上锁,也就是不采用数据库自身的锁机制,而是通过程序来实现。时间戳或者版本号。
1. 乐观锁的版本号机制。
2. 乐观锁的时间戳机制s