diff --git a/mysql/mysql文档/mysql_事务.md b/mysql/mysql文档/mysql_事务.md index f0f2867..779ae66 100644 --- a/mysql/mysql文档/mysql_事务.md +++ b/mysql/mysql文档/mysql_事务.md @@ -379,4 +379,22 @@ undo log中主要存储旧的col值,用于在回滚或mvcc时为undo操作提 - `TRX_UNDO_DEL_MARK_REC`类型的记录,将原记录标记为删除 - `TRX_UNDO_INSERT_REC`类型的记录,标记对`新纪录`的插入回滚 +### purge +表`t`中,`a`为聚簇索引,`b`为辅助索引,若执行如下sql +```sql +delete from t where a=1; +``` + +上述语句造成的修改如下: +- 将主键`a`为1的记录标记为delete,将记录`delete flag`设置为1(聚簇索引中的数据并没有被实际物理删除),`且会生成针对聚簇索引的undo log` +- 对于辅助索引中满足`a=1`的记录,同样不会做任何处理,`也不会产生针对辅助索引的undo log` + +> undo log只针对聚簇索引生成,对于辅助索引的变化并不会生成对应的undo log。 +> +> 从上文的undo log内容来看,update undo log和insert undo log都记录了唯一索引(聚簇索引)的值,并且update undo log记录了各修改列的oldValue,二者均不涉及辅助索引内容。 + +可知在delete语句执行时,并不会马上就对记录进行物理删除,而是将记录标记为delete,记录实际的删除在purge操作时才被执行。 + +在update +