MySQL-锁机制和事务

一、innodb锁机制

1.1、简介

1)InnoDB存储引擎支持行级锁,其大类可以细分为共享锁和排它锁两类

  • 共享锁(S):允许拥有共享锁的事务读取该行数据。当一个事务拥有一行的共享锁时,另外的事务可以在同一行数据也获得共享锁,但另外的事务无法获得同一行数据上的排他锁
  • 排它锁(X):允许拥有排它锁的事务修改或删除该行数据。当一个事务拥有一行的排他锁时,另外的事务在此行数据上无法获得共享锁和排它锁,只能等待第一个事务的锁释放

2)除了共享锁和排他锁之外,InnoDB也支持意图锁。该锁类型是属于表级锁,表明事务在后期会对该表的行施加共享锁或者排它锁。所以对意图锁也有两种类型:

  • 共享意图锁(IS):事务将会对表的行施加共享锁
  • 排他意图锁(IX):事务将会对表的行施加排它锁

3)举例来说select … lock in share mode语句就是施加了共享意图锁,而select … for update语句就是施加了排他意图锁

4)这四种锁之间的相互共存和排斥关系如下:

image

5)所以决定一个事务请求为数据加锁时能否立即施加上锁,取决于该数据上已经存在的锁是否和请求的锁可以共存还是排斥关系,当相互之间是可以共存时则立即施加锁,当相互之间是排斥关系时则需要等待已经存在的锁被释放才能施加

猜你喜欢

转载自www.cnblogs.com/hujinzhong/p/11643442.html