首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【说站】mysql增值保存的位置

mysql增值保存的位置 在我们使用mysql时,会遇到增主键。那么不同的引擎有着不一样的增值保存策略,对于增值保存的位置,我们分为两种情形讨论。...1、MyISAM引擎的增值存储在数据文件中。 2、InnoDB引擎的增值,在MySQL5.7和之前的版本中,增值保存在内存中,不会持久。...每一次重新启动,第一次打开表格时,都会找到增值max(id),然后把max(id)+步长作为当前的增值。...select max(ai_col) from table_name for update; 在MySQL较高版本中,增值的变化记录在redolog中,重启时依靠redolog恢复重启前的值。...以上就是mysql增值保存位置的介绍,希望对大家有所帮助。更多mysql学习指路:MySQL 推荐操作系统:windows7系统、mysql5.8、DELL G3电脑

2K20

MySQL主键增值为什么有“空洞”?

-------+------+----------------------------------------+ 1 row in set (0.00 sec) 在测试过程中惊奇的发现测试表中的主键增列发生了改变...InnoDB引擎的增值,其实是保存在了内存里,并且到了MySQL 8.0版本后,将自增值的变更记录在了redo log中,当MySQL发生重启的时候依靠redo log恢复重启之前的增值。...在此前,现在该表的增值是7,重启后又变成4了。...同时插入指定值大于增值时,增值也会随之改变。...5,当插入数据时,增值就会插入5的值并且把增值加1,问题就出现了,此时增值再进行插入就违背了唯一的原则了 4.问题拓展 在生产环境中还存在很多类似的问题,如: # 目前的插入值为8,增值为9 mysql

2.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL数据表中的auto_increment增值属性及修改

    环境说明: MySQL 5.7 、MySQL 8.0 长期以来,我的博客数据库中连续文章的主键编号一直都不是连续的,让我这个强迫症晚期患看着很不舒服。...把改完主键编号的文章数据导入新数据库之后,就产生了一个新问题:现在新数据表的主键增值还是旧数据表的主键增值。...增值的取值问题 1、默认取值 默认情况下,增值从1开始,每增加一条新记录,增值便会增 1。...但是,服务器上的数据库增值依然还是原来的值,可是,当我在重新插入一条记录时,新记录的增值却是修改过后的值。...这属实让我有点摸不着头脑,我也不太确定是不是 MySQL 版本不同的原因,也懒得再尝试了,所以把这种情况记录上来以供参考吧。

    3.3K10

    重启MySQL服务(怎么重启mysql服务)

    一、MYSQL服务 我的电脑——(右键)管理——服务与应用程序——服务——MYSQL——开启(停止、重启动) 二、命令行方式 Windows 1.点击“开始”->“运行”(快捷键Win+R)。...2.启动:输入 net stop mysql 3.停止:输入 net start mysql 提示* Redhat Linux 也支持service command,启动:# service mysqld...start 停止:# service mysqld stop 重启:# service mysqld restart * Windows下不能直接重启(restart),只能先停止,再启动。...其实我们可以通过批处理完成 保存为 mysqlreset.bat 复制代码 代码如下: net stop mysql net start mysql 三、Too many connections 2008...解决方法: 1、虚拟主机用户请联系空间商优化 MySQL 服务器的配置; 2、独立主机用户请联系服务器管理员优化 MySQL 服务器的配置,可参考: 修改 MySQL 配置文件(Windows下为 my.ini

    12.4K30

    MySQL增主键id重启后重复使用问题解析

    如果在此过程中删除部分数据,那么MySQL重启后再插入数据,增主键ID是否会重复使用呢?本文将通过具体示例,解析MySQL增主键id在重启后是否重复使用的问题。...; 可以看到,重启MySQL后插入的新记录id为18,并没有重复使用已经删除的15,16,17。...四、原理解析 MySQL增主键id重启后为什么没有重复使用呢?...MySQL服务器重启后,会读取信息架构表中的auto_increment值,以确定下一个增id,从而避免了已经使用的id重复分配问题。...idIncrement,避免单表过大 vivo_tmp_xxx临时表可用于生成id,避免影响线上表增值六、总结MySQL增主键id在重启后不会重复使用已经删除的id,这是由其自动保存并恢复auto_increment

    81510

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

    对于MyISAM引擎,增值保存在数据文件中; b. Innodb引擎,mysql5.7之前,增值保存在内存中,而且不会持久化增值。...每次重启后第一次打开表,都会去查找增值的最大值max(id), 并设置表当前增值为max(id) + 1; mysql8.0, 增值变更记录在了redo log中,重启时依靠redo log恢复重启之前的值...指定了具体的值,若指定值小于当前增值,则增值不发生改变;若大于当前增值,则增值为指定值+auto_increment_increment; 3. 增值的修改时机? a....增值修改发生在插入数据的操作之前,如果插入失败,增值不会再修改回去; b. 事务回滚也不会将自增值修改回去; c. 为了减少增id锁带来的性能影响,mysql不会修改回去之前的增值; 4....而对于批量插入数据的语句(select … insert,replace … select 和 load data 语句),MySQL 有一个批量申请增 id 的策略(注:该策略是导致增 id 不连续的第三种原因

    9.4K50

    mysql 主键增语句_MySQL 增主键

    MySQL 5.7 及之前的版本,增主键最大值会在启动(重启)后从数据库中取出放到内存: SELECT MAX(ai_col) FROM table_name FOR UPDATE; 这样获取是通过计算的...如果删除最新一条数据(假设 ID 为 10),因故障或者其他必要重启后再插入一条数据时会使用之前的 ID (即 ID 为 10)。...但是在充值之前,该账号被删除,然后服务器故障重启重启后有人新注册了一个账号。结果我的 100 万充到了他的新账号上。注册新账号的人以为是新手福利,笑嘻嘻。 如何解决单调性的问题?...从 MySQL 8.0 开始,增主键最大值会在每次修改后写入到 redo log,并且在每个检查点写入引擎私有的系统表。 如果是正常重启,则读取系统表里的值。...参考文档 为什么 MySQL增主键不单调也不连续 https://database.51cto.com/art/202004/614923.htm 《MySQL技术内幕——InnoDB存储引擎》

    10.8K10

    关于增id 你可能还不知道

    我们先来看下MySQL增值的保存策略: InnoDB 引擎的增值,其实是保存在了内存里,并且到了 MySQL 8.0 版本后,才有了“增值持久化”的能力,也就是才实现了“如果发生重启,表的增值可以恢复为...MySQL 重启前的值”,具体情况是: 在 MySQL 5.7 及之前的版本,增值保存在内存里,并没有持久化。...每次重启后,第一次打开表的时候,都会去找增值的最大值 max(id),然后将 max(id)+1 作为这个表当前的增值。...但如果马上重启实例,重启后这个表的 AUTO_INCREMENT 就会变成 10。 也就是说,MySQL 重启可能会修改一个表的 AUTO_INCREMENT 的值。...在 MySQL 8.0 版本,将自增值的变更记录在了 redo log 中,重启的时候依靠 redo log 恢复重启之前的值。

    1.3K30

    sysbench花式采坑之一:增值导致的TPS不可靠

    | MySQL异步复制性能低于MGR架构 这次测试需要测一下架构之间的性能对比,一开始走势是非常好的,异步复制性能高于半同步复制,嗯,很符合预期嘛,前景一片良好,那测一下MGR吧,我十分潇洒的搭架构,造数据...… 从ID列的结果可以看出,两种架构的增值是不一样的,那增值不同为什么会出现性能不同的现象呢,先耗费些许灵力把我冥想中的图炼化两幅出来吧。...在经验上来说,这种情况99.9%就是增造成的,于是我又看了一下MGR的配置描述,果然注意到了之前一眼扫过去就排除嫌疑的MGR专门控制增的参数。...总之,这是增值对sysbench压测带来的一个坑,那增值会不会还有其他坑呢?嗯,今日气冲斗府,微盈相冲,正是闭关的好时机,我必须去闭个关了,先升它一个小境界。...| 作者简介 李文航·沃趣科技数据库技术专家 熟悉MySQL体系结构和工作原理、SQL调优、数据库故障诊断、数据迁移、备份恢复

    82651

    MySQL实战第三十九讲-增主键为什么不是连续的?

    InnoDB 引擎的增值,其实是保存在了内存里,并且到了 MySQL 8.0 版本后,才有了“增值持久化”的能力,也就是才实现了“如果发生重启,表的增值可以恢复为 MySQL 重启前的值”,具体情况是...在 MySQL 5.7 及之前的版本,增值保存在内存里,并没有持久化。每次重启后,第一次打开表的时候,都会去找增值的最大值 max(id),然后将 max(id)+1 作为这个表当前的增值。...在 MySQL 8.0 版本,将自增值的变更记录在了 redo log 中,重启的时候依靠 redo log 恢复重启之前的值。...MySQL 直到 8.0 版本,才给 InnoDB 表的增值加上了持久化的能力,确保重启前后一个表的增值不变。...然后,我和你分享了在一个语句执行过程中,增值改变的时机,分析了为什么 MySQL 在事务回滚的时候不能回收自增 id。

    90010

    MySQL增主键详解「建议收藏」

    不同的引擎对于增值的保存策略不同 1.MyISAM引擎的增值保存在数据文件中 2.InnoDB引擎的增值,在MySQL5.7及之前的版本,增值保存在内存里,并没有持久化。...每次重启后,第一次打开表的时候,都会去找增值的最大值max(id),然后将max(id)+步长作为这个表当前的增值 select max(ai_col) from table_name for update...; 在MySQL8.0版本,将自增值的变更记录在了redo log中,重启的时候依靠redo log恢复重启之前的值 二、增值修改机制 如果字段id被定义为AUTO_INCREMENT,在插入一行数据的时候...假设,某次要插入的值是X,当前的增值是Y 1.如果X<Y,那么这个表的增值不变 2.如果X>=Y,就需要把当前增值修改为新的增值 新的增值生成算法是:从auto_increment_offset...4294967295; INSERT INTO t VALUES(NULL); INSERT INTO t VALUES(NULL); 第一个insert语句插入数据成功后,这个表的AUTO_INCREMENT没有改变

    5.9K40

    39 | 增主键不连续

    InnoDB 引擎的增值,其实是保存在了内存里,并且到了 MySQL 8.0 版本后,才有了“增值持久化”的能力,也就是才实现了“如果发生重启,表的增值可以恢复为 MySQL 重启前的值”,具体情况是...每次重启后,第一次打开表的时候,都会去找增值的最大值 max(id),然后将 max(id)+1 作为这个表当前的增值。...但如果马上重启实例,重启后这个表的 AUTO_INCREMENT 就会变成 10。也就是说,MySQL 重启可能会修改一个表的 AUTO_INCREMENT 的值。...在 MySQL 8.0 版本,将自增值的变更记录在了 redo log 中,重启的时候依靠 redo log 恢复重启之前的值。...MySQL 直到 8.0 版本,才给 InnoDB 表的增值加上了持久化的能力,确保重启前后一个表的增值不变。

    4.8K10

    MySQL重大Bug!增主键竟然不是连续递增

    InnoDB 增值保存在内存,MySQL 8.0后,才有了“增值持久化”能力,即才实现了“若重启,表的增值可以恢复为MySQL重启前的值”,具体情况是: ≤5.7,增值保存在内存,无持久化。...每次重启后,第一次打开表时,都会去找增值的最大值max(id),然后将max(id)+1作为这个表当前的增值。 若一个表当前数据行里最大的id是10,AUTO_INCREMENT=11。...但若马上重启实例,重启后,该表的AUTO_INCREMENT就会变成10。 即MySQL重启可能会修改一个表的AUTO_INCREMENT值。...MySQL 8.0将自增值的变更记录在redo log,重启时依靠redo log恢复重启之前的值。 理解了MySQL增值的保存策略以后,我们再看看增值修改机制。...所以唯一键冲突是导致增主键id不连续的一大原因。 事务回滚是二大原因。 为何现唯一键冲突或回滚时,MySQL不把增值回退? 这么设计是为了提升性能。

    2.6K00

    MySQL增主键一定是连续

    但如果马上重启 MySQL 实例,重启后这个表的 AUTO_INCREMENT 就会变成 1。也就是说,MySQL 重启可能会修改一个表的 AUTO_INCREMENT 的值。...以上,是在我本地 MySQL 5.x 版本的实验,实际上,到了 MySQL 8.0 版本后,增值的变更记录被放在了 redo log 中,提供了增值持久化的能力,也就是实现了“如果发生重启,表的增值可以根据...redo log 恢复为 MySQL 重启前的值” 也就是说对于上面这个例子来说,重启实例后这个表的 AUTO_INCREMENT 仍然是 2。...理解了 MySQL 增值到底保存在哪里以后,我们再来看看增值的修改机制,并以此引出第一种增值不连续的场景。...增值不连续场景 1 在 MySQL 里面,如果字段 id 被定义为 AUTO_INCREMENT,在插入一行数据的时候,增值的行为如下: 如果插入数据时 id 字段指定为 0、null 或未指定值,

    3.8K10
    领券