mysql自增的列,刪除一些行後,為什麼不是按順序排列的?

來源:互聯網
上載者:User

,15到44之間刪除了很多行,但45,46那些並沒有被放到15與44之間,
而46到50之間刪除的位置,卻被後面的,52,51填充回去了,為什麼會這樣?而且是52在51之前?
然後,46到50之間應該有三個空位,但填充了兩個之間,後面的53又跑到50後面去了,這又是為什麼呢?

.................
看各位的回答,好像是我沒有表達清楚。
我不是問15之後為什麼不是16,而是問為什麼44,46跑到52的前面去了??

回複內容:

,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了?

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.