闲聊MySQL:(六)深入分析InnoDB之锁类型
前言 在前几篇中,我们对MySQL的内部结构进行了介绍,对InnoDB的内部结构和核心机制进行了了解,本篇,我们继续深入InnoDB引擎,对InnoDB的锁机制进行简要的介绍。 InnoDB锁类型 在前面的文章中,我们介绍过,为了高性能的支持, InnoDB 实现了标准的行级锁。行级锁的意思代表着仅对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。因此,InnoDB可以支持较高的并发性。 InnoDB可以支持的锁的类型如下: 共享锁 排他锁 意向锁 记录锁 区间锁/间隙锁 临键锁 插入意向锁 自增锁 那么下面,我们对这些类型的锁进行依次介绍。 共享锁与排他锁(Shared and Exclusive Locks) InnoDB 实现了标准的行级锁,分为两种类型: 共享(S)锁 和 排他(X)锁 。 共享(S) 锁允许持有该锁的事务读取行。 排他(X) 锁允许持有该锁的事务更新或删除行。 如果事务T1在行A上持有共享(S)锁,则其他事务T2对行A的锁的请求按如下方式处理: 可以立即授予T2对S锁的请求。 结果,T1和T2都在r上持有S锁。 T2的X锁定请求不能立即授予。 如果事务T1在行B上持有排他(X)锁,则不能立即授予其他事务T2对行B上任何类型的锁请求。 相反,T2必须等待T1释放其对行B的锁定。 总结一下,如果对一行记录加共享锁