2010-07-16 58 views
2

因此,讓我們說我有一個表(可以說50行,50列),我偶爾需要進行微小的編輯。雖然我意識到我可能會(可能有些人會告訴我我應該)使用查詢來做到這一點,但我喜歡使用數據庫管理程序(如Sequel Pro)手動進行更改。排序mySQL表的字段

所以我有兩個問題:

當你做一個查詢,而無需指定的順序來顯示結果,它遵循的是它保存在數據庫中的順序。有沒有辦法改變這個順序(不是你的結果的順序,在表本身的順序),而不需要手動切換行?

另外,有沒有什麼辦法可以自動排序字段在表格中顯示的方式(列順序)?

我知道我應該只是使用查詢來改變值,但是(imo)如果表足夠小,我發現在像Sequel Pro這樣的程序中找到行和列更容易,只需要改變它。

而且,如果我的方法是完全錯誤的,請告訴我

回答

3

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

ALTER TABLE name ORDER BY something 

它配備了一些沉重的警告,不依靠他們爲別的話,或許一些非常小的性能增益其所排序中,只是爲了您的方便,在工具中運行任意選擇而無需排序:

ORDER BY使您可以將c按照特定的順序對行進行重新創建。請注意,在插入和刪除之後,該表格不會保持此順序。這個選項主要用於當你知道你主要是在大部分時間以特定順序查詢行時。在對錶格進行重大更改後使用此選項,您可能會獲得更高的性能。在某些情況下,如果表格按您希望稍後訂購的列順序排列,則可能會使MySQL的排序更容易。

+0

在一般情況下(更多的讀取而不是修改)我可以說,這是更好的我重新排序我的表每個修改,因爲所有的讀取將被排序?即使桌子變大了! – cvsguimaraes 2014-04-11 16:36:54

+1

@cvsguimaraes:你可以測試這個,但我非常懷疑它。由於鎖定重新排序,使得寫入操作成爲巨大的寫入操作將無助於最繁忙的應用程序。在您選擇和排序的列上有一個索引通常會更有幫助,特別是如果您只需要該索引中的列。如果寫入非常少見(每天幾次,或寫入每隔幾天突發),這可能是有益的,但我個人只會建議如果(幾乎)靜態表(類似於一個固定的郵政編碼表和像),每隔幾個月你可能需要更新一次。 – Wrikken 2014-04-17 18:40:41

1

當你做一個查詢,而無需指定的順序來顯示結果,它遵循的是它保存在數據庫中的順序。有沒有辦法改變這個順序(不是你的結果的順序,在表本身的順序),而不需要手動切換行?

有沒有什麼辦法來自動字段在表中顯示的方式(列順序)排序?

數據庫不關心列順序。我被告知可以從某些SQL IDE的度假村列執行語句,但它會創建一個新表&傳輸覆蓋範圍內的數據。

0

引用OMG小馬

當你做一個查詢,而無需指定的順序來顯示結果,它遵循的是它保存在數據庫中的順序。有沒有辦法改變這個順序(不是你的結果的順序,在表本身的順序),而不需要手動切換行?

,並添加,不僅可以不改變它,但

它遵循它保存在數據庫中的順序

不一定正確。從數據庫返回記錄的順序不保證以任何特定順序,除非您使用ORDER BY子句。

除了具有格式化您的表中你想要的順序和列,你可以簡單地粘貼每次你想做出改變,我不能真正幫助您的時間在一個方便的SQL腳本。

Select ID, FirstColumn, ThirdColumn, SecondColumn from myConfigTable 
Order By FieldToOrder 
+0

如果不存在ORDER BY,通常會保證插入順序。 – 2010-07-16 20:37:31

+0

通常和保證不是兩個詞,我會放在一起。一般來說,訂單是一樣的,但不保證是。然而,只要你不依賴它,它就會保證改變。 :) – 2010-07-16 20:43:28

+0

取決於每個數據庫供應商 - 很難保證在該領域的任何事情。 – 2010-07-16 21:41:02

0

同上不可預測的順序。如果你想以某種順序行,這就是ORDER BY的用途。爲了表達自己的想法,你的問題就像問:「我怎樣才能讓我的車左轉而不用方向盤?」即使有一些棘手的方法來實現這一點,有什麼意義?

RE列順序:MySQL對SQL標準有一個擴展,允許您重新排列表中列的順序。我相信這是

ALTER TABLE mytable MODIFY mycolumn varchar(50) AFTER othercolumn; 

這會將列「mycolumn」移動到「othercolumn」之後。我想你必須在這個例子中給出數據類型 - varchar(50),但當然它可以是任何東西 - 即使它沒有改變。

要使列成爲第一列,您說FIRST而不是AFTER之後。

請注意,這不是標準的SQL。大多數SQL引擎不允許您指定列順序。一些純粹主義者堅持認爲沒有列順序這樣的東西,一行是沒有特定順序的列的集合。然而,在現實生活中,數據庫引擎必須以某種順序存儲它們,而我從來沒有見過一個數據庫,其中「select *」沒有以一致的順序返回列。就我個人而言,我經常編寫從模式構建數據輸入屏幕的通用代碼,並按照他們從「select *」返回的順序列出這些字段。我喜歡MySQL這種程序,因爲它允許我在數據庫中指定列順序,而不必將其分層到其他位置,或者必須重建表以獲得所需的順序。

我對SQL Pro並不熟悉,但大多數工具都會尊重DBMS的列順序。