两种锁的概念
为了确保并发用户在存取同一数据库对象时的正确性(即无丢失修改、可重复读、不读“脏”数据),数据库中引入了锁机制。基本的锁类型有两种:排它锁(Exclusive locks记为X锁)和共享锁(Share locks记为S锁)。
排它锁:若事务T对数据D加X锁,则其它任何事务都不能再对D加任何类型的锁,直至T释放D上的X锁;一般要求在修改数据前要向该数据加排它锁,所以排它锁又称为写锁。
共享锁:若事务T对数据D加S锁,则其它事务只能对D加S锁,而不能加X锁,直至T释放D上的S锁;一般要求在读取数据前要向该数据加共享锁,所以共享锁又称为读锁。
多粒度封锁
在一个数据上加锁的时候,可以显示封锁(排他),对整个表的读,(共享锁)。
显示加锁和隐示,效果一致。 两个(显示,隐示)各自有没有冲突(父节点对其隐示)
这样做会浪费很多时间,于是引入意向锁。
表下面元组,元组下面属性列。
意向锁
加意向排他锁,加意向共享。简化申请,对根节点进行验证。理清楚三个相容矩阵的关系就好。
(图后补),
一级锁、二级锁、三级锁
一级锁:所有写操作之前加X锁,事务结束释放,可以防止丢失修改;
二级锁;所有写操作之前加X锁,事务结束释放;所有读操作前加S锁,操作结束释放,可以防止丢失修改和读脏数据;
三级锁:所有写操作之前加X锁,事务结束释放;所有读操作前加S锁,事务结束释放,可以防止丢失修改、读数据和不可重复读;