您好,欢迎访问一九零五行业门户网

MySQL自增主键删除后重复问题

innodb类型的数据表将表最后的id值保存在内存里面。所以,当我们重新启动服务器后,内存里面的数据清空,那么自增的id将重新按照
这是我同事的一个朋友遇到的问题,标题可能有些拗口,我重现下场景:
设置一张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还是会如期自增的。
其它类似信息

推荐信息