赞
踩
意向锁表示某个事务正在锁定一行或者将要锁定一行,表明一个意图。它分为意向共享锁(IS)和意向排他锁(IX):
一个事务对一张表的某行添加共享锁前,必须获得对该表一个IS锁或者优先级更高的锁。
一个事务对一张表的某行添加排他锁之前,它必须对该表获取一个IX锁。
意向锁属于表锁,它不与innodb中的行锁冲突,任意两个意向锁之间也不会产生冲突,但是会与表锁(S锁和X锁)产生冲突,如下表:
兼容性 S锁 X锁
IS锁 兼容 冲突
IX锁 冲突 冲突
表锁和行锁已经保证了事务的隔离性,确保数据一致,那么为什么还要使用意向锁呢?
意向锁是在当事务加表锁时发挥作用。比如一个事务想要对表加排他锁,如果没有意向锁的话,那么该事务在加锁前需要判断当前表的每一行是否已经加了锁,如果表很大,遍历每行进行判断需要耗费大量的时间。如果使用意向锁的话,那么加表锁前,只需要判断当前表是否有意向锁即可,这样加快了对表锁的处理速度。
意向锁是有存储引擎自己维护的,是内部机制,用户无法操作意向锁。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。