数据库-封锁类型


1.读写锁

互斥锁(Exclusive),简写为X锁,又称为写锁。

共享锁(Shared),简写为S锁,又称为读锁。

对X锁和S锁有两个规定:

①一个事务对数据对象A加了X锁,那么就可以对A进行读取和更新。加锁期间其他事务不能对A加任何形式的锁。

②一个事务对数据对象A加了S锁,可以对A进行读取操作,但是不能进行更新操作。加锁期间其他事务能对A加S锁,但是不能加X锁。

 

2.意向锁

意向锁在X/S锁的基础上引入了IX/IS锁。意向锁是一种表级锁,但是它是一种不与行级锁冲突的表级锁。加意向锁不会影响加行级锁,它只会阻塞表级锁。使用意向锁(Intention Locks)可以支持多粒度封锁(同时存在表级锁和行级锁)。

意向锁主要解决在表级锁和行级锁同时存在时,加表级锁需要检测表级锁和每一行的行级锁时效率低下的问题。比如在同时存在表级锁和行级锁的时候,如果一个事务想要对表A加X锁(表级锁),就要检测表A以及表A的任一行是否加了锁,这样检测十分耗时。

意向锁的主要作用是:如果有一个事务在表上加了锁,其他事务想要在该表级别上应用X锁或S锁,就会受到第一个事务的意向锁的阻塞。其他事务在锁定该表之前不需要检测表或者表的每一行是否加了锁,而只需要检测表的意向锁。

意向锁是数据引擎(InnoDB)自己维护的,用户不能手动修改意向锁。一个事务在表的某一行加X锁或S锁之前,数据引擎会先获取该数据行所在数据表的相应IX或IS锁。

所有的意向锁之间是兼容的。意向锁也不会与行级的S/X锁互斥。

意向锁不会影响多个事务对表的不同行加互斥锁,但用普通的表锁会

意向锁只是为了用来阻塞表级锁,意向锁和表级读写锁之间的兼容关系如下表:

  意向互斥锁 意向共享锁
表级互斥锁 冲突 冲突
表级共享锁 冲突 兼容

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM