InnoDB之锁类型

为什么要有锁?
支持对共享资源进行并发访问,提供数据的完整性和一致性。


InnoDB一般会在哪些地方用到锁?
InnoDB除了在行级别上对表数据上锁外,还会在缓冲池中的LRU列表使用锁。


为什么要将锁进一步细化?
锁可以应对并发问题,但对于热点数据,还需要将锁细化为读锁与写锁以应对更高的并发。


其它
对于MyISAM引擎,其锁是表锁设置,并发情况下读是没有问题的。所以针对于只读应用,底层可选用MyISAM而非InnoDB以获得更高性能。


InnoDB锁的类型
共享锁:S Lock,允许事务读一行数据。
排他锁:X Lock,允许事务删除或更新一行数据。
意向锁:Intention Lock,允许事务在行级上的锁和表级上的锁同时存在,意向锁将锁定对 象分为多个粒度,意向锁意为着事务希望在更细粒度上进行加锁。
意向共享锁:IS Lock,事务想要获得一张表中某几行的共享锁。
意向排他锁:IX Lock,事务想要获得一张表中某几行的排他锁。

意向锁使用举例
若将上锁的对象看成一棵树,那么对最下层的对象上锁,也就是对最细粒度的对象上锁,那么首先需要对粗粒度的对象上锁。例如,如果需要对页上的记录R进行上X锁,那么分别需要对数据A,表,页上意向锁IX,最后对记录R上X锁。

InnoDB各种锁的兼容性

IS IX S X
IX 兼容 兼容 兼容 不兼容
IS 兼容 兼容 不兼容 不兼容
S 兼容 不兼容 兼容 不兼容
X 不兼容 不兼容 不兼容 不兼容

你可能感兴趣的:(mysql)