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