美文网首页
MySQL主键

MySQL主键

作者: 慧鑫coming | 来源:发表于2019-02-23 05:28 被阅读0次

不同引擎主键自增值的保存

  • MyISAM引擎的自增值保存在数据文件中。
  • InnoDB,MySQL5.7及以前的版本,保存在内存里(没有持久化,MySQL重启后不会记录之前的值,而是找当前最大的id值+1);MySQL8.0版本后,保存在redo log中,有恢复能力。

字段定义为AUTO_INCREMENT的行为

  • 如果插入的数据字段为0,null或未指定值,那么就把这个表当前的AUTO_INCREMENT值填到自增字段。
  • 如果插入数据时指定了字段具体的值,就直接使用指定的值。
      1、如果要插入的值<当前的自增值,那么这个表的自增值(AUTO_INCREMENT)不变。
      2、如果要插入的值>=当前自增值,把当前的自增值修改为新的自增值。

新的自增值生成算法

  • auto_increament_offset开始,以auto_increment_increment为步长,持续叠加,直到找到第一个大于要插入值的值,作为新的自增值。
  • auto_increment_offset表示初始值auto_increment_increment表示步长,默认值都是1。
  • 初始值步长都是1的情况下,新的自增值生成逻辑:
      1、要插入的值>=当前的自增值,新的自增值就是要插入的值+1
      2、否则,自增值不变。
  • 某些场景下初始值步长不全是默认配置。比如双M的主备结构要求双写的时候,就可能将步长设置为2,让一个库的自增id是奇数,另一个库的自增id是偶数,避免两个库生成的主键发生冲突。

可能导致自增值不连续的原因

  • 数据插入操作出现Duplicate key error后。
  • 事务回滚后。

相关文章

  • mysql操作数据库

    MYSQL主键自增用法

  • MySQL--索引

    MySQL索引 查看索引 创建索引 创建唯一索引 创建主键索引 删除索引 删除主键 MySQL视图 创建视图 删除...

  • MySQL主键

    不同引擎主键自增值的保存 MyISAM引擎的自增值保存在数据文件中。 InnoDB,MySQL5.7及以前的版本,...

  • MYSQL数据库约束类型

    MYSQL数据库约束类型 一.主键约束(primary key) 主键约束要求主键列的数据唯一,并且不能为空。主键...

  • ClickHouse索引查询优化

    索引简介 clickhouse主键即索引,不同于mysql,clickhouse主键可以重复。 clickhous...

  • 第一次商讨

    1. 数据库 Mysql Oracle 主键,Oracle 用Sequence生成主键,主键唯一,各表共用一个自增...

  • mysql索引小结

    1.搭建mysql测试环境 模拟三百万数据入库 mysql所以简单操作:测试s1表添加主键 添加主键前后执行: 添...

  • 2018-07-09 复合主键

    Mysql 多列形成主键(复合主键 ) 什么是数据表的复合主键所谓的复合主键 就是指你表的主键含有一个以上的字段组...

  • Mysql添加索引

    mysql语句添加索引 1.PRIMARYKEY(主键索引) mysql>ALTERTABLE`table_nam...

  • mysql 学习语句

    MySQL学习笔记 登录和退出MySQL服务器 基本语法 建表约束 主键约束 唯一主键 非空约束 默认约束 外键约...

网友评论

      本文标题:MySQL主键

      本文链接:https://www.haomeiwen.com/subject/jjiweqtx.html