Question: 9
Which two statements are true about InnoDB auto-increment locking? A. InnoDB never uses table_level locks. B. InnoDB always protects auto-increment updates with a table-level lock C. InnoDB does not use locks to enforce auto-increment uniqueness. D. The auto-increment lock can be a table-level lock. E. Some settings for innodb_autoinc_lock_mode can help reduce locking.
复制
答案:DE
解析:
- InnoDB引擎中使用auto_increment机制时,自增的列必须是索引的唯一列或者第一列;这个索引没有强制要求主键索引或者唯一索引,但为了避免重复值,推荐使用唯一约束或者主键约束。
- 使用自增列时,通常要求值 连续且单调递增。当一个表中存在自增列时,使用insert语句向该表插入数据时,insert语句会给表加一个自增锁直到语句完成,此时其它事务的插入需要等待。
- InnoDB对自增锁提供了三种实现,可以通过参数innodb_autoinc_lock_mode指定使用哪种锁定策略:
- innodb_autoinc_lock_mode=0,传统模式,所有insert语句都会加特殊的表级锁-自增锁,来保证语句内自增列的顺序是连续并可预测和可重复的。这意味着如果binlog格式是statement,从节点上执行复制sql时将会生成和主节点上相同的值或者使用binlog进行日志重放时是安全的。
- innodb_autoinc_lock_mode=1,连续模式,批量insert语句使用表级自增锁,普通insert语句使用互斥锁来控制所需数量的自增量,互斥锁仅在分配过程中持有,而不用等到语句完成;如果其它语句持有自增锁,此时会等待自增锁完成。
- innodb_autoinc_lock_mode=2,交叉模式,所有insert都不是表级自增锁。多个insert语句可以同时执行。只保证自增列的的值 唯一且单调递增,不能保证连续。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。