InnoDB在不同隔离级别下的一致性读级锁的差异

InnoDB在不同隔离级别下的一致性读级锁的差异

锁和多版本数据是InnoDB实现一致性读和ISO/ANIS SQL92隔离级别的手段,因此,在不同的隔离级别下,InnoDB处理SQL时采用的一致性读策略和需要的锁是不同的。(下面的表来自《深入浅出MYSQL》20.3.7节)

SQL 条件 Read Uncommitted Read Committed Repeatable Read Serializable
select 相等 None locks Consistenread/None lock Consistenread/None lock Share locks
范围 None locks Consistenread/None lock Consistenread/None lock Share Next-key
update 相等 exclusive locks exclusive locks exclusive locks exclusive locks
范围  exclusive next-key   exclusive next-key   exclusive next-key   exclusive next-key
insert N/A  exclusive locks  exclusive locks  exclusive locks  exclusive locks
replace 无键冲突  exclusive locks  exclusive locks  exclusive locks  exclusive locks
键冲突  exclusive next-key  exclusive next-key  exclusive next-key  exclusive next-key
delete 相等   exclusive locks   exclusive locks   exclusive locks   exclusive locks
范围  exclusive next-key  exclusive next-key  exclusive next-key  exclusive next-key
select ... from ... lock in share mode 相等  Share locks  Share locks  Share locks  Share locks
范围  Share locks  Share locks  Share Next-key  Share Next-key
select...from... for update 相等  exclusive locks  exclusive locks  exclusive locks  exclusive locks
范围  exclusive locks exclusive locks  exclusive next-key  exclusive next-key
insert into...select...(指源表锁) innodb_locks_unsafe_for_binlog=0  share next-key   share next-key   share next-key   share next-key
innodb_locks_unsafe_for_binlog=1  None locks  Consistenread/None lock  Consistenread/None lock  Share next-key
create table... select ... (指源表锁) innodb_locks_unsafe_for_binlog=0  Share next-key  Share next-key  Share next-key  Share next-key
innodb_locks_unsafe_for_binlog=1   None locks   Consistenread/None lock  Consistenread/None lock  Share next-key

发表回复