mysql主键自增策略_MySQL 自增主键机制

mysql主键自增策略_MySQL 自增主键机制自增主键:特指在自增列上定义的主键。自增主键的优点是让主键索引保持递增顺序的插入,避免页分裂,索引更加紧凑。1.自增值保存在哪?不同的存储引擎保存自增值的策略不一样;a.对于MyISAM引擎,自增值保存在数据文件中;b.Innodb引擎,mysql5.7之前,自增值保存在内存中,而且不会持久化自增值。每次重启后第一次打开表,都会去查找自增值的最大值max(id),并设置表当前自增值为ma…

大家好,又见面了,我是你们的朋友全栈君。

自增主键:特指在自增列上定义的主键。 自增主键的优点是让主键索引保持递增顺序的插入,避免页分裂,索引更加紧凑。

1. 自增值保存在哪?

不同的存储引擎保存自增值的策略不一样;

a. 对于MyISAM引擎,自增值保存在数据文件中;

b. Innodb引擎,mysql5.7之前,自增值保存在内存中,而且不会持久化自增值。每次重启后第一次打开表,都会去查找自增值的最大值max(id), 并设置表当前自增值为max(id) + 1; mysql8.0, 自增值变更记录在了redo log中,重启时依靠redo log恢复重启之前的值。

2. 自增值修改策略?

a. 在插入时如不指定或指定为0,null,则使用当前的自增值填到自增字段;并设置当前自增值=当前自增值+auto_increment_increment 步长;

b. 指定了具体的值,若指定值小于当前自增值,则自增值不发生改变;若大于当前自增值,则自增值为指定值+auto_increment_increment;

3. 自增值的修改时机?

a. 自增值修改发生在插入数据的操作之前,如果插入失败,自增值不会再修改回去;

b. 事务回滚也不会将自增值修改回去;

c. 为了减少自增id锁带来的性能影响,mysql不会修改回去之前的自增值;

4. 自增锁的优化

a. 自增锁不是事务锁,在每次申请完就释放;在5.0版本会在语句执行完才释放,后续版本无须在语句执行完才释放;支持批量申请;

b. 一次性insert多条记录时,如果能计算出需要多少个id,就一次性申请,申请完就释放;

c. insert … select 默认会使用语句级的锁,只有语句执行完才会释放自增锁,为了数据的一致性;

d. 而对于批量插入数据的语句(select … insert,replace … select 和 load data 语句),MySQL 有一个批量申请自增 id 的策略(注:该策略是导致自增 id 不连续的第三种原因。):语句执行过程中,第一次申请自增 id,会分配 1 个;1 个用完以后,这个语句第二次申请自增 id,会分配 2 个;2 个用完以后,还是这个语句,第三次申请自增 id,会分配 4 个;依此类推,同一个语句去申请自增 id,每次申请到的自增 id 个数都是上一次的两倍。

e. 对于批量插入数据,使用insert … select, replace … select 和load data语句时,可设置innodb_autoinc_lock_mode=2, binlog_format=row提高并发性,保证一致性;

5. 自增值到达上限

自增值不再变化,再次申请时,得到的值保持不变。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147797.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LintCode 链表排序[通俗易懂]

    LintCode 链表排序[通俗易懂]题目描述:在O(nlogn)时间复杂度和常数级的空间复杂度下给链表排序。样例给出1->3->2->null,给它排序变成1->2->3->null.思路分析:sort扫一遍~ac代码:/***DefinitionofListNode*classListNode{*public:*intval;*ListNode*next;

    2022年10月9日
  • 单片机声源定位_基于stm32交通灯源代码

    单片机声源定位_基于stm32交通灯源代码stm32声源定位本科毕业设计(论文)基于STM32单片机声源方向识别器设计与实现摘要近年来,基于麦克风阵列的声源定位系统被广泛地应用于电话会议、视频会议、语音增强、助听器等系统中,因此受到了越来越多的关注,已经成为一大研究热点。在各种声源定位方法中,基于到达时延估计的双步定位法原理简单,运算量小,精度相对较高,有利于实时实现,因此它的应用也最为广泛,本文着重研究了该方法。本文首先给出了麦克风阵列…

    2022年9月22日
  • objectmapper json转对象_图片格式转换器

    objectmapper json转对象_图片格式转换器JSONObject转换为Mapimportcom.alibaba.fastjson.TypeReference;importcom.alibaba.fastjson.JSONObject;JSONObjectobj=newJSONObject();{obj.put(“key1″,”value1”);obj.put(“key2″,”value2”);obj.put(“key3″,”value3”);}Map<String,String>params=

    2022年8月23日
  • cubieboard boot过程

    cubieboard boot过程A10的启动过程大概可分为5步:BootRom,SPL,Uboot,Kernel,RootFileSystem。本文只关注镜像的加载过程,分析RootRom->SPL->Uboot的启动流程。系统上电后,ARM处理器在复位时从地址0x000000开始执行指令,把板上ROM或Flash映射到这一地址。A10将启动设备选择程序固化在CPU内部的一个32KBROM中,默认的启动时序为SD

    2022年7月22日
  • 证书认证过程_过程装备与控制工程可考证书

    证书认证过程_过程装备与控制工程可考证书现在很多的网站都会用​​https证书申请​​了,因为https证书好处现在越来越受到人们的认知,https安全证书的好处不仅仅对于客户的信息隐私数据有保护,对于维护网站的知名度以及安全可信度也是大有帮助。这也是很多人用申请https证书,但是他们首先遇到的难题就是申请https证书的过程是怎么样的?申请​​https证书​​的步骤是怎样的呢?1、要想完成https证书的申请,要先确定申请什么类型的https:大体来说有安全等级可以分为域名型证书,企业型证书以及增强型证书。根据自己网站.

    2022年10月1日
  • Java中的Map及其使用「建议收藏」

    Java中的Map及其使用「建议收藏」MapMap集合概述和特点概述:将键映射到值的对象一个映射不能包含重复的键每个键最多只能映射到一个值Map接口和Collection接口的不同Map是双列的,Collection是单列的Map的键唯一,Collection的子体系Set是唯一的Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效Map集合的功能概述a:添加功能Vput…

    2022年7月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号