Home >Backend Development >PHP Tutorial >mysql自增的列,删除一些行后,为什么不是按顺序排列的?

mysql自增的列,删除一些行后,为什么不是按顺序排列的?

WBOY
WBOYOriginal
2016-06-06 20:27:151351browse

mysql自增的列,删除一些行后,为什么不是按顺序排列的?

如图所示,15到44之间删除了很多行,但45,46那些并没有被放到15与44之间,
而46到50之间删除的位置,却被后面的,52,51填充回去了,为什么会这样?而且是52在51之前?
然后,46到50之间应该有三个空位,但填充了两个之间,后面的53又跑到50后面去了,这又是为什么呢?

.................
看各位的回答,好像是我没有表达清楚。
我不是问15之后为什么不是16,而是问为什么44,46跑到52的前面去了??

回复内容:

mysql自增的列,删除一些行后,为什么不是按顺序排列的?

如图所示,15到44之间删除了很多行,但45,46那些并没有被放到15与44之间,
而46到50之间删除的位置,却被后面的,52,51填充回去了,为什么会这样?而且是52在51之前?
然后,46到50之间应该有三个空位,但填充了两个之间,后面的53又跑到50后面去了,这又是为什么呢?

.................
看各位的回答,好像是我没有表达清楚。
我不是问15之后为什么不是16,而是问为什么44,46跑到52的前面去了??

自增和你删除数据没有必然联系吧,自增的ID有自己单独的序列,不是取表中的最大id+1

自增ID是会按照出现过的最大值增加的,不管你删没删。

MySQL会为每一个自增列储存一个这样的最大值,而不是每次都去表里查找最大的值。
效率问题,自己想……

另外,序号是有意义的,可参照数据库设计的基本原则。
每一个序号都对应着指定的一个事物。
这么设计也可以避免因为不完全的删除(比如另外一个表的列和ID相关,但是没有随之删除)而导致混乱。

最后……
我表示,多年经验,能不删的就不删。
完整性,可恢复性,数据挖掘……
加一个列作为标记(表明是否有效),比删除的设计要好。

PS:貌似发现自己没理解清问题……
排序的问题,看你的SQL啊,那么在意顺序的话,就写个order by咯。

如果需要按某个字段排序,需要 order by
要不然mysql只会按它的规则来显示数据,你没指定规则,就不要期待它符合你想要的规则

插入数据的时候就是排好序的么?

1.自增id是指在写表的时候自增长,而不是类似excel那样删除一行,下行自动上移。

2.顺序问题,你没执行sort?或者按别的字段sort了?

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn