数据库锁的相关概念

56 阅读2分钟

1、共享锁(Shared Lock,也叫S锁)

共享锁(S)表示对数据进行读操作。因此多个事务可以同时为一个对象加共享锁。

2、排他锁(Exclusive Lock,也叫X锁)

排他锁表示对数据进行写操作。如果一个事务对对象加了排他锁,其他事务就不能再 给它加任何锁了。

3、表级锁

开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发 度最低。

4、行级锁

开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发 度也最高。

5、页面锁

开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行 锁之间,并发度一般。

6、行锁(Row Lock)

对一行记录加锁,只影响一条记录。 通常用在DML语句中,如INSERT, UPDATE, DELETE等。

7、表锁(Table Lock)

对整个表加锁,影响标准的所有记录。通常用在DDL语句中,如DELETE TABLE,ALTER TABLE等,表锁影响整个表的数据,因此并发性不如行锁好。

8、乐观锁

总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但 是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机 制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量。

9、悲观锁

总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的 时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一 个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据 库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作 之前先上锁。