我了解到 InnoDB 中的所有二级 B 树都存储表单对(搜索键,TID),其中 TID 是记录的主键。我有以下问题:
(1)在InnoDB中,二级B树是否通过mark-deletion实现删除?即叶子中的条目被标记为删除而不是物理删除。
(2)如果是这样,当插入一个新的条目,其搜索键与一些现有的标记删除条目相同时,InnoDB如何确定标记删除条目是否已提交?例如,假设 B 树是唯一索引。假设第一个事务标记删除搜索键hello
,第二个事务尝试插入搜索键hello
。如果第一个事务尚未提交,则插入应该失败;否则,插入应该是成功的。我想知道 InnoDB 如何决定是否允许插入hello
。
对你的问题大多是“不”。
让我回顾一下 InnoDB 如何处理二级索引的几个方面。
PRIMARY KEY
.UNIQUE
在事务处理的早期检查密钥;重复将导致“锁定等待超时”或“死锁”或“重复键错误”。可能还有更多。
引用的内容是 MySQL 文献中进一步研究的关键主题。