一、前言

目前MySQL笔记先暂时学到一个段落了,接下来就是继续复习~

二、正文

1.rowid什么时候是非隐式可查询的?内部实现原理是什么?有什么问题?

  • 当有主键、唯一键时

  • 如果InnoDB 表没有指定主键,那么 InnoDB 会给你创建一个不可见的,长度为 6 个字节的 row_id。InnoDB 维护了一个全局的 dict_sys.row_id 值,所有无主键的 InnoDB 表,每插入一行数据,都将当前的 dict_sys.row_id 值作为要插入数据的 row_id,然后把 dict_sys.row_id 的值加 1。

  • 当不设置主键时,大家都用这个全局唯一id,当id达到上限时就会产生覆盖,因为如果再有插入数据的行为要来申请 row_id,拿到以后再取最后 6 个字节的话就是 0。

2.xid是什么,为什么存在?内部实现原理是什么?重启后会出现相同的xid么,为什么?有什么特殊情况会导致同一个binlog文件中出现两个一样的xid?

  • 为了记录redo log和binlog事务之间的关联关系

  • 内部是由一个全局的变量 global_query_id(纯内存变量),每次执行语句的时候将它赋值给 Query_id,然后给这个变量加 1。如果当前语句是这个事务执行的第一条语句,那么 MySQL 还会同时把 Query_id 赋值给这个事务的 xid。

  • 不会,MySQL 重启之后会重新生成新的 binlog 文件,这就保证了,同一个 binlog 文件里,Xid 一定是惟一的。

  • 执行一个事务,假设 xid 是 A;接下来执行 2的64次方查询语句,让 global_query_id 回到 A;再启动一个事务,这个事务的 xid 也是 A。

3.trx_id是什么?内部实现原理是什么?会持久化?如何查询一个事物的trx_id?非只读事务一次只会加一?只读事务id会分配trx_id么,分配算法是什么?为什么用这个算法?只读事务不会分配trx_id的好处是什么?一旦trx_id到达上限那么会如何?

  • 主要是用来体现事务一致性视图,即:可见性判定

  • InnoDB 内部维护了一个 max_trx_id 全局变量,每次需要申请一个新的 trx_id 时,就获得 max_trx_id 的当前值,然后并将 max_trx_id 加 1

  • use information_schema; select trx_id, trx_mysql_thread_id from innodb_trx;

  • 是的,但是你看到的不一定是加一。因为:1)update 和 delete 语句除了事务本身,还涉及到标记删除旧数据,也就是要把数据放到 purge 队列里等待后续物理删除,这个操作也会把 max_trx_id+1, 因此在一个事务中至少加 2;2)InnoDB 的后台操作,比如表的索引信息统计这类操作,也是会启动内部事务。

  • 只读事务,InnoDB 并不会分配 trx_id。算法是:把当前事务的 trx 变量的指针地址转成整数,再加上 2的48次方。

  • 同一个只读事务在执行期间,它的指针地址是不会变的,所以不论是在 innodb_trx 还是在 innodb_locks 表里,同一个只读事务查出来的 trx_id 就会是一样的。--为什么加 2的64次方?区别非只读事务,让人一下子就能明显看出来。

  • 1)减小了事务的一致性视图大小。2)减少锁竞争。

  • 可重复读隔离级别下会出现脏读现象

4.thread_id的分配策略是如何的?

  • 系统保存了一个全局变量 thread_id_counter,每新建一个连接,就将 thread_id_counter 赋值给这个新连接的线程变量。内部使用锁自旋原理

45 | MySQL中主键自增id达到上限?xid也能达到上限?trx_id也也可以到上限?相关推荐

  1. mysql 设置主键自增语句

    mysql 设置主键自增语句 alter table 表名 modify id int auto_increment primary key 若提示 > 1068 - Multiple prim ...

  2. Mysql中主键和外键和索引

    Mysql中主键和外键和索引 1.主键和外键是什么 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是 ...

  3. mysql中主键的用法_MySQL中的主键以及设置其自增的用法教程

    1.声明主键的方法:您可以在创建表的时候就为表加上主键,如: CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name)); 也可以 ...

  4. mysql设置主键自增

    1.mysql数据库给主键增加一个自增的功能: mysql> alter table sec_user modify id integer auto_increment ; Query OK, ...

  5. Mysql关于主键自增后的插入语句编写

    如果设置了id主键自增的话,编写插入语句不需要插入id值 那么mysql的语句就变为: insert into table_name (字段名,字段名) value(插入值,插入值);

  6. 解决MySQL中主键无法设置自增

    问题:为什么主键无法设置自增? 修改前:可以看到我给主键设置的类型为字符串 而自增的前提为int数据类型,因此导致AI自增无法点击. 修改前: 解决方法:将主键的datatype修改为int 自增就能 ...

  7. mysql中主键、普通索引、唯一索引和全文索引

    SQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录 开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录 ...

  8. MySQL 中主键的几种表设计组合的实际应用效果

    了解主键.外键.索引 主键 主键的主要作用是保证表的完整.保证表数据行的唯一性质, ① 业务主键(自然主键):在数据库表中把具有业务逻辑含义的字段作为主键,称为"自然主键(Natural K ...

  9. MySQL中主键和unique的区别

    主键:primary key 能够唯一标识表中某一行的属性或属性组. 主键也是一个特殊的索引. ⼀个表可能有多个候选键,我们可以选择⼀个候选键作为表 的 主键 . ⼀个表最多只能有⼀个主键, 主键列不 ...

最新文章

  1. PKU ACM 1258 Agri-Net http://acm.pku.edu.cn/JudgeOnline/problem?id=1258
  2. asp.net缓存机制
  3. Linux C 深入分析结构体指针的定义与引用
  4. 进程调度实验_Linux应用编程之进程的PID与PPID
  5. 院士袁亚湘:莫把数学当语文来教
  6. SQLAlchemy
  7. 乾坤 微前端_最全汇总之微前端知识和实战(EMP技术方案)
  8. 寻找链表倒数第k个节点
  9. linux操作字符串、文本常用命令总结
  10. Vulkan开发实战详解
  11. 【保姆级手写理解——灰色预测理论以及python实现】
  12. Socket 服务器和客户端交互
  13. mac系统我的世界服务器,我的世界Mac版联机教程
  14. 程序员那些必须掌握的排序算法(上)
  15. AutoCAD2022下载安装教程
  16. VS 2010 与 VS 2008的区别
  17. 密码重置用HTML怎么弄,如何用简单命令重置路由器密码
  18. 同一设备安装不同版本的Vue脚手架
  19. 笔试 | 东方财富 2020 春季校园招聘后端开发在线笔试【Python】【C++】【字符串】【动态规划】
  20. 实现语音对讲_校园IP广播对讲融合解决方案

热门文章

  1. Eclipse的Debug各种视图介绍(二)
  2. 计算机主板就一亮关机了,技嘉主板电脑关机后键盘鼠标还亮怎么回事?技嘉主板有效解决方法...
  3. 为信息安全操碎了心?别着急,教你一招免费解决
  4. 动态网页项目宠物商店
  5. 判断P2P打洞能否成功的方法
  6. 打开计算机硬盘竖着两列,怎么把excel的两行改成列
  7. VMware忘记账号密码的解决办法
  8. 4.6设计一个算法判断图G中从顶点u到v是否存在简单路径
  9. 如何快速理解复杂业务,系统思考问题?
  10. 王者服务器维护7月21日,7月21日部分服务器数据互通公告