数据库-封锁协议
1.三级封锁协议
一级封锁协议
事务在修改数据时必须先加X锁,在事务结束之后释放X锁。
这样可以解决丢失修改的问题。因为不能有两个事务同时修改同一个数据,所以不会有修改被覆盖的问题。
二级封锁协议
在一级的基础上,要求读取数据A之前必须加上S锁,读取A之后立即释放S锁。
这样可以解决读脏数据的问题。因为一个事务如果对A进行修改,必须先加X锁。其他事务就不能在数据A上加S锁,就不能读取A,也就不会读到脏数据。
三级封锁协议
在二级的基础上,要求在读取数据A之前加上S锁,在事务结束之后再释放S锁。
这样可以解决不可重复读的问题。因为在事务结束前,数据A上一直有S锁,其他事务不能再在A上加X锁来修改A,在读取期间数据的值不会发生改变。
2.两段锁协议
加锁和解锁分两个阶段进行。
两段锁协议可以解决幻影读的问题。事务遵循两段锁协议是可串行化调度的充分非必要条件。可串行化调度是指,通过并发控制,使得事务并发执行的结果和某个串行执行事务的执行结果相同。串行执行的事务之间互不干扰,不会有并发一致性问题。
MySQL的InnoDB引擎采用两段锁协议,会根据隔离级别在需要的时候自动加锁,在同一时刻释放所有锁,这被称为隐式锁定。InnoDB也有特定的语句进行显式锁定。
相关推荐
  DriveCar    2020-09-07  
   quniMdejiangyou    2020-08-15  
   qingjiuquan    2020-07-18  
   zhanbuquan    2020-07-04  
   liaomingwu    2020-06-25  
   lpfvip00    2020-06-25  
   zhanbuquan    2020-06-21  
   daillo    2020-06-17  
   sunysh00    2020-06-11  
   vincen    2020-06-10  
   langyue    2020-06-09  
   DriveCar    2020-06-09  
   airfling    2020-06-08  
   sofast    2020-06-03  
   weikaixxxxxx    2020-05-30  
   neweastsun    2020-05-27  
   sunysh00    2020-05-25  
   silencehgt    2020-07-04  
   variab    2020-06-13  
   zjx0    2020-05-20  
   愿天下再无BUG    2020-05-16  
   pengpengflyjhp    2020-05-14  
   MissFuTT    2020-05-11  
   inhumming    2020-05-10  
   好记忆也需烂    2020-05-10  
 