mysql中的共享锁与排他锁

  行级锁分为共享锁和排他锁两种

  

  共享锁:又称读锁,是读取操作创建的锁,其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有的共享锁。

  如果事务T对数据S加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁,获准共享锁的事务只能读时局,不能修改数据。

  用法:

  select...LOCK IN SHARE MORE

  在查询语句后面增加LOCK IN SHARE ,ORE,mysql会对查询结果中的每行都加共享锁,当没有其他县城对查询结果集中的任何一行使用排他锁时,可以成功申请共享锁,否则会被阻塞,其他县城也可以读取使用了共享锁的表,而且这些县城读取时是同一个版本的数据。

  排他锁:又称写锁,如果事务T对数据A加上排他锁后,则其他事务不能再对A加任何类型的锁,获准排他锁的事务既能读数据,又能修改数据

  用法:SELECT... FOR UPDATE

  在查询语句后面增加FOR UPDATE,mysql会对查询结果中的每行都加排他锁,当没有其他县城对查询结果集中的任何一行使用排他锁时,可以成功申请排他锁,否则会被阻塞

  

  意向锁

  innodb还有两个表锁

  1、意向共享锁(IS):表示事务准备给数据航加入共享锁,也就是说一个数据行加共享锁钱必须先取得该表的IS

  2、意向排他锁(IX):表示事务准备给数据行加入排他锁,说明事务在一个数据航加排他锁钱必须先取得该表的IX

  意向锁是Innodb自动加的,不需要用户干预

  

  共享锁:SELECT ... LOCK IN SHARE MODE;

  排他锁:SELECT ... FOR UPDATE;

原文地址:https://www.cnblogs.com/alighie/p/8298436.html