InnoDB锁模式

MySQL InnoDB一共有四种锁:共享锁(读锁,S锁)、排他锁(写锁,X锁)、意向共享锁(IS锁)和意向排他锁(IX锁)。其中共享锁与排他锁属于行级锁,另外两个意向锁属于表级锁。

  • 共享锁(S:允许一个事务去读一行,阻止其他事务获得相同的数据集的排他锁。就是我读的时候,你可以读,但是不能写。
  • 排他锁(X:允许获得排他锁的事务更新数据,但是组织其他事务获得相同数据集的共享锁和排他锁。我写的时候,你不能读也不能写。
  • 意向共享锁(IS:表示事务准备给数据行加入共享锁,也就是说一个数据行加共享锁前必须先取得该表的IS锁
  • 意向排他锁(IX:类似上面,表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他锁前必须先取得该表的IX锁。

意向锁是InnoDB自动加的,不需要用户干预。对于insert、update、delete,InnoDB会自动给涉及的数据加排他锁(X);对于一般的Select语句,InnoDB不会加任何锁,事务可以通过以下语句给显示加共享锁或排他锁。

共享锁:select * from table_name where .....lock in share mode

排他锁:select * from table_name where .....for update

InnoDB行锁模式兼容列表:

当一个事务请求的锁模式与当前的锁兼容,InnoDB就将请求的锁授予该事务;反之如果请求不兼容,则该事务就等待锁释放。

 

posted @ 2018-04-12 16:20  YelaSilent  阅读(303)  评论(0)    收藏  举报