diff --git a/mysql/mysql文档/mysql_事务.md b/mysql/mysql文档/mysql_事务.md index 779ae66..87f7922 100644 --- a/mysql/mysql文档/mysql_事务.md +++ b/mysql/mysql文档/mysql_事务.md @@ -376,7 +376,7 @@ undo log中主要存储旧的col值,用于在回滚或mvcc时为undo操作提 - 在对记录的非主键值进行update时,会生成一条`type_cmpl`值为`TRX_UNDO_UPD_EXIST_REC`的记录,用于对更新操作进行回滚 - update记录的主键值 - 当对记录主键列进行修改时,会生成两条undo log: - - `TRX_UNDO_DEL_MARK_REC`类型的记录,将原记录标记为删除 + - `TRX_UNDO_DEL_MARK_REC`类型的记录,对应`将原记录标记为删除`的回滚 - `TRX_UNDO_INSERT_REC`类型的记录,标记对`新纪录`的插入回滚 ### purge @@ -395,6 +395,14 @@ delete from t where a=1; 可知在delete语句执行时,并不会马上就对记录进行物理删除,而是将记录标记为delete,记录实际的删除在purge操作时才被执行。 -在update +对于记录的`delete`操作和`update`操作(update主键列时,会先将原记录标记为删除,后插入一条新的记录),会在purge操作中完成。purge确保了innodb存储引擎对于MVCC机制的支持,记录不能再事务提交时立刻进行处理,仍会有其他事务会访问该记录的旧版本。 + +是否可以对记录进行物理删除由purge来决定,若某行记录不被其他任何事务引用,可以执行物理delete操作。 + +#### history +innodb存储引擎中维护了一个history列表,其`根据事务的提交顺序`对undo log进行链接,`在history list中,先提交的事务其undo log位于history list的尾端`。 + + +