码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 18 自增长主键的实现 以及 记录的插入


    前言

    这里主要是 探索一下 mysql 的自增长主键 

    和 insert into tz_test (field1) values ("12111111111"); 的实现 

    这里 有一些地方 会有不求甚解的地方, 不然 篇幅 就有点太长了 

     

     

    测试表结构

     

     

    mysql 主键自增长

    读取自增长值的地方, 读取 table->autoinc 作为当前需要使用的值

    1830ab0f8e00467b97a2f09ab4dec15a.png

     

    这里是做增量计算的地方, autoinc 之前是 63, 更新之后为 68

    然后下面的 dict_table_autoinc_update_if_greater 是更新 table->autoinc

    8688c9028d1047aab33a0f907670a52a.png

     

    更新 table->autoinc

    db84a643a27d4f569e0a957a685155c9.png 

    得到的 nr 为 63

    下面的 compute_next_inert_id 计算之后 nr 仍然为 63

    020f729889be439293627f80d48dce62.png

     

    compute_next_inert_id 计算之后 nr 仍然为 63

    0034e37ce32948779ed21e9102322d49.png 

    将数据存储在当前记录的 id 字段中 

    2f8bb2a33acd46ac9d2242e985cc03d8.png 

     

    mysql 将输入的字段存储到 Field* 结构 

    处理之前, 各个 Field* 中可以看到 ptr 中未存储数据 

    如下指针来自于 insert_field_list, 只有一个元素, field01 对应的 Item_field

    7bab6e56ade9468d95d7f11c39281f82.png

     

    fill_record_n_invoke_triggers 之后可以看到 field01 对应的 Item_field 的 Field

    ptr 即为存储的数据, “\v12111111111”, 其中 “\v” 为 varchar 存储的长度 11, 其后的11个字符为存储的数据 “12111111111”

    11707bb415a3433abc319f3a2a3d9a47.png

     

    存储 自增长的字段的地方在这里 

    0ab5061fc4224122a93c9b2bc0758704.png 

     

    mysql Field* 到入库的过程 

    所有的字段 store 完成之后 

    record 中存储的就是 数据表定义的所有的数据, id, field01

    可以看到这里 id 为 0x00000076 为 118, field01 为 12111111111

    2aaade9ca0e642148f6d1f4fbdf1527a.png

     

    这里的循环会将 mysql_rec 的数据填充到 

    row 中, 每一个 dfield 表示一个字段信息, 会存储对应的数据的信息 

    ee5d62ad78a04eae998300a3d5c2f9cb.png

     

    将 d_tuple 转换为 mysql_rec, 这个转换是在 rec_convert_dtuple_to_rec 中 

    eb59a22462024f648e38f50d60e915a7.png 

    tuple 中的信息如下, 四个字段, id, trx_id, pool_ptr, field01

    id 4字节, trx_id 6字节, pool_ptr 7字节, field01 11字节

    9d494d6eafb040c4a96b6d16dd282a76.png

     

    rec 的数据如下 

    id 4字节, trx_id 6字节, pool_ptr 7字节, field01 11字节

    960692ca826d4eaea827a97e2e3a2b09.png

     

    这里是将具体的记录 添加到 page 中, 随着 mysql 的机制, 会对 page 中的数据进行持久化 

    持久化的代码, 我们到这里 基本上就行了

    d2109abea05c4a92bc0e01da03ed7e90.png

     

     

    完 

     

     

     

  • 相关阅读:
    快来体验快速通道,netty中epoll传输协议详解
    drf——分页、jwt介绍与原理、jwt快速使用、jwt源码分析、jwt自定义返回格式、自定义用户签发token、自定义token认证类
    Java:为什么Java比其他编程语言好?
    鲲鹏代码迁移工具介绍
    机器学习(Machine learning,ML)1基础入门
    Excel实战-帮业务人员做道Excel题
    ASP.NET Core 6框架揭秘实例演示[35]:利用Session保留语境
    OpenGL原理与实践——核心模式(三):Texture-纹理系统理论与应用
    2022柏林葡萄酒大奖赛 | 瑞格尔侯爵佳酿斩获两枚金奖
    前端面试宝典React篇17 useEffect 与 useLayoutEffect 区别在哪里?
  • 原文地址:https://blog.csdn.net/u011039332/article/details/130568977
  • 最新文章
  • 硬件版【Cursor】?aily blockly IDE尝鲜封神,实战硬伤尽显
    莱特摩比的一面之缘(前端经验)
    洛谷-P10786 [NOI2024] 百万富翁 题解
    PyTorch KernelAgent 源码解读 ---(3)--- orchestrator
    OpenClaw.NET 外部 CLI 预设系统:从零编写第三方 CLI 集成指南
    二、OpenCloudOS Server 9 系统 安装 Nginx
    AI 开发狂飙!.NET 11 Preview 4 原生集成向量搜索 + MCP 模板,EF Core 直接对标 RAG 应用
    Vibe Coding有多强?我只花了一天,就搓出了这个银行开户行查询网站!
    C# ESP32/STM32 轻量 Web 能力库:PicoServer.Nano
    告别手动计算,SymPy 初识与 Manim 联动
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号