
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
事务隔离是程序员在学习数据库技术的时候需要重点掌握的一个知识点,下面我们就通过案例分析来了解一下,数据库事务隔离都有哪些常见问题。
1.数据行ROW的多版本
InnoDB里面每个事务有一个的事务ID,叫作transactionid。它是在事务开始的时候向InnoDB的事务系统申请的,是按申请顺序严格递增的。
而每行数据也都是有多个版本的。每次事务更新数据的时候,都会生成一个新的数据版本,并且把transactionid赋值给这个数据版本的事务ID,记为rowtrx_id。同时,旧的数据版本要保留,并且在新的数据版本中,能够有信息可以直接拿到它(通过undo_log文件找到)。
也就是说,数据表中的一行记录,其实可能有多个版本(row),每个版本有自己的rowtrx_id。
2.视图数组
下述部分出自资料中的原句,特别是红色加深部分可能会比较难以理解,所以需要结合自己理解并画图
InnoDB是这么在事务开启的时候定义快照的,哪些事务的操作我可以忽视,哪么我必须要保存在快照里。可以理解为:一个事务只需要在启动的时候声明说,“以我启动的时刻为准,如果一个数据版本是在我启动之前生成的,就认;如果是我启动以后才生成的,我就不认,我必须要找到它的上一个版本”。
在实现上,InnoDB为每个事务构造了一个数组,用来保存这个事务启动瞬间,当前正在“活跃”的所有事务ID。“活跃”指的就是,启动了但还没提交。数组里面事务ID的小值记为低水位,当前系统里面已经创建过的事务ID的大值加1记为高水位。这个视图数组和高水位,就组成了当前事务的一致性视图(read-view)。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。