diff --git a/mysql/mysql文档/mysql_事务.md b/mysql/mysql文档/mysql_事务.md index 609833c..f0f2867 100644 --- a/mysql/mysql文档/mysql_事务.md +++ b/mysql/mysql文档/mysql_事务.md @@ -362,5 +362,21 @@ update undo log的格式如下图所示。 - 14:TRX_UNDO_DEL_MARK_REC,将记录标记为delete - update vector: update vector中记录了update操作导致发生改变的列,每个被修改的列信息都记录在undo log中。 +> 在执行delete操作时,并不会直接对行数据进行物理删除操作,而是`将行数据标记为delete`,待后续purge操作中才会实际对数据进行物理删除。 + undo log中主要存储旧的col值,用于在回滚或mvcc时为undo操作提供信息,还原数据先前的版本。 +在实际生成insert/update undo log时,对于插入、更新、删除等操作,其实际生成undo log的方式如下: +- insert操作: + - 对于insert操作,其实际生成一条insert undo log,`type_cmpl`的值为`TRX_UNDO_INSERT_REC` +- delete操作: + - 对于delete操作,其实际生成一条`type_cmpl`值为`TRX_UNDO_DEL_MARK_REC`的undo log + - delete操作并不会直接对记录进行物理删除,而是将记录标记为delete,后续进行purge操作时才会实际删除 +- update记录的非主键值: + - 在对记录的非主键值进行update时,会生成一条`type_cmpl`值为`TRX_UNDO_UPD_EXIST_REC`的记录,用于对更新操作进行回滚 +- update记录的主键值 + - 当对记录主键列进行修改时,会生成两条undo log: + - `TRX_UNDO_DEL_MARK_REC`类型的记录,将原记录标记为删除 + - `TRX_UNDO_INSERT_REC`类型的记录,标记对`新纪录`的插入回滚 + +