2015-11-22 77 views
1

我有一個包含10條記錄和一個ID字段作爲主鍵的表。 我的許多疑問也不包括ORDER BY id。作爲一個例子,它們看起來像:sql cach memory

SELECT * FROM `branch` 

時,我錯誤地刪除的記錄ID爲1我的問題開始,然後改正我的錯誤,我插入了相同的ID和內容記入筆錄。 但現在,在我所有的查詢中,後面插入的行是最後一行。 我的意思是,ID的順序是:2,3,4,5,6,7,8,9,10,1。

我想要的是讓記錄按ID排序,就像它在刪除之前一樣,但我不能在所有查詢中添加ORDER BY id,因爲在許多文件中有這麼多的查詢。

請幫助我, 謝謝,歐姆裏。

+0

也許在'id'上添加主索引可能會起作用。但最好的辦法是修改代碼並在結果排序中不做任何假設 –

+0

'ID'是否自動增量? – ashkufaraz

+0

爲什麼你不更新'ID'? – ashkufaraz

回答

1

爲了解決您的問題,您可以將SET foreign_key_checks=0刪除並重新創建它,按順序插入ID 1到10的值,然後再次輸入SET foreign_key_checks=1。這很可能會解決您的問題。

但我的建議是總是使用ORDER BY

由於您不能相信由於SELECT而導致從MySQL返回的記錄的順序。默認情況下,MySQL以它存儲它們的順序返回結果,並且它將記錄存儲在任何找到「漏洞」的地方。

這意味着如果您進行批量插入,它可能會佔用連續的內存分配。現在,如果您從該組中刪除一條記錄,則會打出一個洞,該坑將被後續插入佔用,並且在SELECT中反映相同。

+0

好的,謝謝你,我正在使用ORDER BY,這很簡單:) –

+1

爲了更加強調:如果你需要輸出是按照某個順序,但你沒有指定'ORDER BY',那麼你的代碼是_broken_ ,或者靠運氣來工作。 SQL不保證輸出的順序,除非有'ORDER BY'子句。 –