mysql - 修改后的 DB_TRX_ID 隐藏字段是否会比它使用的要小?
问题描述
根据 mysql 参考,6 字节的事务 ID 字段将添加到集群索引记录中,并将设置为创建/修改它的事务的值。我的问题是:假设事务1、2在mysql中处于活动状态并且2修改了一条记录,同时将其事务ID设置为2。释放锁并退出。那么事务1再次输入并修改同一条记录,事务ID是否会被修改为小于2的1?
解决方案
如果您对 InnoDB 内部存储格式感兴趣,您可能希望获得 Jeremy Cole 的Innodb_ruby 工具。
我尝试创建一个test.foo
包含 1 行的表,并使用一系列事务更新了该行。然后我可以使用 Jeremy Cole 的脚本转储页面:
innodb_space -s ibdata1 -T test/foo -p 3 page-dump
...
records:
{:format=>:compact,
:offset=>125,
:header=>
{:next=>112,
:type=>:conventional,
:heap_number=>2,
:n_owned=>0,
:min_rec=>false,
:deleted=>false,
:nulls=>[],
:lengths=>{},
:externs=>[],
:length=>5},
:next=>112,
:type=>:clustered,
:key=>[{:name=>"id", :type=>"BIGINT UNSIGNED", :value=>7}],
:row=>[],
:sys=>
[{:name=>"DB_TRX_ID", :type=>"TRX_ID", :value=>2843},
{:name=>"DB_ROLL_PTR",
:type=>"ROLL_PTR",
:value=>
{:is_insert=>true, :rseg_id=>20, :undo_log=>{:page=>335, :offset=>272}}}],
:length=>21,
:transaction_id=>2843,
:roll_pointer=>
{:is_insert=>true, :rseg_id=>20, :undo_log=>{:page=>335, :offset=>272}}}
您可以在:sys
键下看到 DB_TRX_ID。当我对该行进行进一步更新时,此值会更改。您可以自己尝试一下,看看值如何变化。
阅读 Jeremy 的系列博文以了解有关 InnoDB 格式的更多信息:
以下是他的博客文章列表:https ://blog.jcole.us/innodb/
推荐阅读
- ios - Unity - 减少 iOS AppStore 版本大小
- vba - vba - 字典和数组
- mongodb - 基于父条件的深度填充
- javascript - jQuery的奇怪的导航栏口吃
- swift - Swift 类:用指向成员函数的闭包声明变量
- mysql - 获取会议中的最后注册
- c# - C# Microsoft 教程 EF Core with Razor Pages - 搜索参数
- python - Python - 将字典列表拆分为单独的字典
- javascript - 如何使用嵌套的 .each 函数从 json 生成表?
- java - Spring:使用 REST 服务发布新对象时出现类型定义错误