mysql中具体的数据是存储在行中的,而行是存储在页中的。也就是说页是凌驾于行之上的。

mysq一个页大小为16K,当然这个大小是可以通过修改配置文件来改变的。

mysql页结构大致示意图:

当我们新建一个表的时候表中用户记录部分(user records)部分是空的,在我们插入一条记录后会被记录到其中,直到插入满时会把记录信息刷入到下一个页中,循环往复。。。

记录头信息大致示意图:

1.delete_mask:表示该行记录是否被删除其实就是删除记录的标识位并占用一个二进制位,其中0--未删除   1--已删除

2.heap_no:表示当前记录在该页中的位置,除此之外heap_no中还存在两条虚拟记录行用于记录当前页中最大记录和最小记录的主键值

3.next_record:表示当前记录的真实数据到下一条记录的真实数据的地址偏移量,其实这就是个单项链表,可以通过一条记录找到下一条记录。但值得注意的是下一条记录并不是我们插入顺序的下一条记录而是按照主键值由小到大的顺序的下一条记录。而且规定最小记录的下一条记录就是本页中存储的主键值最小的记录,而本页中主键值最大的记录的下一条记录就是本页中的最大记录

如图所示:

上图所示的记录的顺序是顺序插入的记录顺序(1.2.3.4),可是我们在实际开发中经常会出现非顺序插入的情况。如下图所示:

当出现非顺序插入的情况,虽然插入顺序由(1.2.3.4)变为了(1.2.4.3)但是它的链表顺序是不会改变的依旧保持(1.2.3.4)这里需要注意的是图中heap_no的顺序插入和heap_no的非顺序插入是不一样的。

当我们在实际开发过程中出现表记录删除的情况时上图中的相应记录信息也会发生变化例如:最大记录行和最小记录行的变化(可能会变化)、next_record的变化(参照数据结构中单链表删除时的变化,后继指针置空操作)、delete_mask的变化(0--未删除   1--已删除)、heap_no的变化、n_owned值的变化

注意:不论我们怎么做增删改操作,InnoDB对页中的数据始终会维护一个单向链表,链表中各个节点是按照主键值由小到大的顺序来存储的

mysql页中的行记录头部信息的更多相关文章

  1. 在 .NET Core 中使用 DiagnosticSource 记录跟踪信息

    前言 最新一直在忙着项目上的事情,很久没有写博客了,在这里对关注我的粉丝们说声抱歉,后面我可能更多的分享我们在微服务落地的过程中的一些经验.那么今天给大家讲一下在 .NET Core 2 中引入的全新 ...

  2. mysql 数据库中存在重复记录,删除保留其中一条

    DELETE FROM people WHERE peopleName IN ( SELECT peopleName FROM people GROUP BY peopleName HAVING ) ...

  3. MySQL批量UPDATE多行记录

    UPDATE categories     SET display_order = CASE id         WHEN 1 THEN 3         WHEN 2 THEN 4        ...

  4. 查mysql字段中的数字记录

    select * from a where nameregexp '^[0-9]+$' ;

  5. MYSQL内置MYSQL数据库中你可以得到的信息

    1:help_topic  可以查看函数帮助,例如:SELECT * from help_topic WHERE name='concat' 可以查看concat函数. 2:SLOW_LOG 慢查询日 ...

  6. 数据页结构 .InnoDb行格式、以及索引底层原理分析

    局部性原理 局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中. 首先要明白局部性原理能解决的是什么问题,也就是主存容量远远比缓存大, CP ...

  7. 聊一聊 MySQL 数据库中的那些锁

    在软件开发中,程序在高并发的情况下,为了保证一致性或者说安全性,我们通常都会通过加锁的方式来解决,在 MySQL 数据库中同样有这样的问题,一方面为了最大程度的利用数据库的并发访问,另一方面又需要保证 ...

  8. 转 MySQL中的行级锁,表级锁,页级锁

      对mysql乐观锁.悲观锁.共享锁.排它锁.行锁.表锁概念的理解 转载. https://blog.csdn.net/puhaiyang/article/details/72284702 实验环境 ...

  9. [数据库事务与锁]详解五: MySQL中的行级锁,表级锁,页级锁

    注明: 本文转载自http://www.hollischuang.com/archives/914 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的 ...

  10. 【数据库】数据库的锁机制,MySQL中的行级锁,表级锁,页级锁

    转载:http://www.hollischuang.com/archives/914 数据库的读现象浅析中介绍过,在并发访问情况下,可能会出现脏读.不可重复读和幻读等读现象,为了应对这些问题,主流数 ...

随机推荐

  1. wxpython 文件重命名报错提示os.rename WinError 2]系统找不到指定的文件‘

    原因:重命名需要把文件路径带上 源码: for file in files: print(file) os.rename(file, file.replace(beforename, afternam ...

  2. golang 逃逸分析详解

    疑问 请问main调用GetUserInfo后返回的&User{...}.这个变量是分配到栈上了呢,还是分配到堆上了? package main type User struct { ID i ...

  3. docker报错 ERROR: Service 'workspace' failed to build: ERROR: Service 'php-fpm' failed to build:

    在 Windows 系统中使用 Laradock 搭建基于 Docker 的 PHP 开发环境 执行命令 docker-compose up nginx mysql redis 执行过程中出现错误 报 ...

  4. 2D小游戏--猜对应卡牌(unity)

    博客地址:https://www.cnblogs.com/zylyehuo/ 项目名称 guess_card_game 参考源码链接: https://www.manning.com/books/un ...

  5. Linux centos 运行telnet命令command not found的解决方法

      Linux centos 运行telnet命令,出现下面的错误提示: 1 2 [root@localhost ~]# telnet 127.0.0.1 -bash: telnet: command ...

  6. 独立博客与秘密基地,以及对UI设计中拟物态的怀念

    小时候的秘密基地 哪个人小的时候不想有一个"秘密基地"呢?后来人长大了,心里还有这个小欲望,想有一块属于自己的空间,可以自由装饰,可以藏喜欢的东西,不受社会道德约束,不受规则铁蹄践 ...

  7. BUUCTF---RSA3(共模攻击)

    1.题目 RSA已知e1,e2,c1,c2 2.知识 共模攻击使用相同N作为加密的模数,如果监听者获知了c1,c2的密文,那么监听者便不需要d1,d2即可解出明文m 3.解题 按照思路编写代码解题 点 ...

  8. 在 ThinkPHP 6 控制器中使用文件锁机制

    创建锁管理类 首先,创建一个锁管理类来处理文件锁: namespace app\common\service; use Exception; class LockManager { private $ ...

  9. cannot resolve unit......

    Just disable Error Insight (Tools -> Options -> Editor Options -> Code Insight, uncheck Err ...

  10. Lazarus信创之路:启程,自动升级程序

    相信国内做Delphi开发的不在少数,信创大趋势下,很多转Lazarus开发了.最近我也研究了一下,决定也转到这下面来,主要考虑:1.商业化方便,无版权纠纷:2.兼容Delphi语法,上手很快:3.原 ...