这是我同事的一个朋友遇到的问题,标题可能有些拗口,我重现下场景:

设置一张MySQL表,表里有一个自增主键ID,往表里插入数据,假如插入数据之后表最后一行的ID是100,我先删除这条ID为100的记录,然后重新启动服务器,按理说如果再往这个表里插入新的记录,新纪录的ID将为101,对吧?估计大家都是这么想的,但是,结果是:如果你的表类型是InnoDB,那么,新纪录的ID为100;如果你的表类型是MyISAM,那么,新纪录的ID为101。但是,如果我们在删除了ID为100的纪录,但是没有重新启动服务器的条件下,再新增一条新纪录,新纪录的自增ID都为101。

为什么会出现这种现象?

这是由于不同的表类型保存自增ID的地方不同:InnoDB类型的数据表将表最后的ID值保存在内存里面。所以,当我们重新启动服务器后,内存里面的数据清空,那么自增的ID将重新按照现有表的纪录计算;相反,如果是MyISAM类型的数据表,将最大纪录ID保持在文件里,这样,虽然,重启了服务器,下次插入新纪录的时候,自增ID通过读取文件而计算得到。

如何解决这个问题?

相信大家都能想到的办法就是:不重启服务器。但是,有些情况下,不得不重启下服务器,由于服务器很长时间高速运转必须重新启动一下。也有朋友会回答,将表结构都设置为MyISAM类型,只要是在不影响现有业务的前提下,都是可行的。这里,我分享下我的方法:我的方法很简单,其实,我们压根就没有必要说删除那些记录,很多情况下,我们设置的表自增ID是没有多大意义的,那么,我们可以在表结构新增加一个字段来标示这条记录是否有效,如status字段,1表示有效,0表示失效,如果,不希望看到哪些记录,只要将这些记录的status字段值设置为0即可,下次新增记录ID还是会如期自增的。

说在最后:本人是疯狂的编程图书收藏者,www.codejia.net 个人收藏屋,金屋藏娇于此。这篇文章里遇到的问题可能很多人不曾遇到过,事实上这类事情很少会遇到的,但是,了解了总是有好处的。

MySQL自增主键删除后重复问题相关推荐

  1. Mysql 自增主键重复的问题

    问题描述 MySQL Bugs: #199: Innodb autoincrement stats los on restarthttps://bugs.mysql.com/bug.php?id=19 ...

  2. mysql自增主键返回---创建成功后返回用户的ID

    mysql自增主键返回 查询id的sql SELECT LAST_INSERT_ID() 通过修改User.xml映射文件,可以将mysql自增主键返回: 如下添加selectKey 标签 <! ...

  3. 美团面试:MySQL 自增主键一定是连续的吗?

    美团问数据库比较多,分享一位读者面试美团遇到的关于 MySQL 自增主键的问题. 下面是正文. 众所周知,自增主键可以让聚集索引尽量地保持递增顺序插入,避免了随机查询,从而提高了查询效率 但实际上,M ...

  4. hive导数据到mysql 自增主键出错_老大问我:“建表为啥还设置个自增 id ?用流水号当主键不正好么?”...

     前言"又要开始新项目了,一顿操作猛如虎,梳理流程加画图.这不,开始对流程及表结构了.我:吧啦吧啦吧啦 --老大:这个建表为啥还设置个自增 id ?直接用流水号(用户号/产品号)当主键不就行 ...

  5. mybatis获取mysql自增主键_Mybatis获取数据库自增主键

    一般我们都为将表中主键列设置为自增,当我们执行插入语句时,比如这样 //测试添加 Employee employee = new Employee(null, "jerry4",n ...

  6. mybatis mysql自增主键_mybatis 自增主键配置

    mybatis 自增主键配置 mybatis自增主键配置(?) mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同.基本上经常会 遇到的就是 Oracle Seque ...

  7. mysql自增主键和mybatis自增主键不一致问题(已解决):

    mysql自增主键和mybatis自增主键不一致问题(已解决): 在插入数据前,先进行查询主键 <insert id="insertSelective"><sel ...

  8. mysql自增主键设置

    mysql自增主键设置 在数据库应用中,经常希望在每次插入新纪录时,系统自动生成字段的主键值.可以通过为表主键添加AUTO_INCREMENT关键字来实现. 默认情况下,在MYSQL中AUTO_INC ...

  9. mysql自增主键的返回

    1.Mybatis的基础配置 https://blog.csdn.net/qq_43163943/article/details/110261144 2.Mybatis自增主键的实现 执行顺序是先插入 ...

最新文章

  1. C++ mutable
  2. 基于OpenCV提取特定区域方法汇总
  3. java8新特性_Java8新特性之Date API|乐字节
  4. php redis删除所有key,PHP 对 Redis key 值的操作
  5. 二叉树(BST)之创建二叉搜索树
  6. VTK:Utilities之FileOutputWindow
  7. python程序写蛇_python蟒蛇绘制程序
  8. ImportError: No module named 'keras.utils.visualize_util'
  9. Redhat Linux编译安装LAMP环境
  10. Docker - 容器部署 Consul 集群
  11. Qt文档阅读笔记-Broadcast Receiver Example解析
  12. JAVA day06 酒店管理系统
  13. Linux shell__文件操作
  14. 软件详细设计的几个参考模板
  15. Android-EditText属性大全
  16. Python练习题 013:求解a+aa+aaa……
  17. “软件工程”到底学什么(一)
  18. CS224W图机器学习笔记8-图神经网络三大应用
  19. linux ftp主动和被动模式切换命令,Linux iptables配置FTP的主动和被动模式
  20. php开发模拟基金定投网站

热门文章

  1. 汶川地震《生死不离》歌词
  2. 日记 [2007年09月22日]solaris 10 挑战
  3. 哲理短文一则:揭示最好的成功法则
  4. go list指针_「GCTT 出品」Go 语言机制之内存剖析
  5. matlab中load seamout,matlab中的save与load函数
  6. 如果项目上线在上线期间出现BUG改怎么办?
  7. java jexl_利用Jexl实现数据库的计算公式在Java中执行
  8. 最短路dijkstra算法详解_图论系列开始填坑--Dijkstra,单源最短路
  9. 微信图片显示定位服务器,姚晓雷:通过一张微信图片定位对方具体位置的方法...
  10. 计算机文化基础在线作业答案,地大《计算机文化基础》在线作业一答案.doc