2009-11-16 100 views
7

當使用「ALTER TABLE tab ADD col」時,新列將被添加到表格的末尾。例如:在表格中間插入新列?

TABLE: TAB 
COL_1 COL_2 COL_4 

ALTER TABLE TAB ADD COL_3 

表將成爲

TABLE: TAB 
COL_1 COL_2 COL_4 COL_3 

但是作爲我的例子列命名建議其實我喜歡錶落得這樣的:

TABLE: TAB 
COL_1 COL_2 COL_3 COL_4 

隨着COL_4之前的COL_3。

除了從頭開始重建表,還有任何標準的SQL可以完成工作嗎?但是,如果沒有標準的SQL,我仍然可以使用一些依賴於供應商的Oracle解決方案,但是標準解決方案也是最好的。

謝謝。

+6

真的很重要嗎?列順序不應該與任何東西有關,除非你使用'select *',在這種情況下,你不應該...... – skaffman 2009-11-16 08:36:00

+0

@skaffman,我明白你的意思是select *有點粗糙。但能夠使用它真的很好,特別是對於針對數據庫發送的快速自定義查詢。到目前爲止,大家一直在使用select *,而我的選擇是修復列或者重新編輯每個人(他們只是想讓他們的工作快速而輕鬆地完成),他們需要使用正確的SQL。 「這些人」是程序員,而不是數據庫程序員,他們發現需要編寫龐大的查詢來回答一個簡單的問題。 – 2009-11-16 08:44:21

+0

@Robert Gould - 給人們一個可以使用的常見查詢的文本文件,或者至少給他們「select ... FROM tablename」,他們可以放在其餘的。 – 2009-11-16 08:46:14

回答

11

默認情況下,只在最後添加列。要在中間插入一列,必須刪除並重新創建表和所有相關對象(約束條件,索引,默認值,關係等)。

有幾個工具可以爲您做到這一點,並根據表的大小,這可能是一個密集的操作。

您也可以考慮在表格上按照preferrence的順序顯示列的視圖(覆蓋表中的實際順序)。

+0

是的觀點解決方案是我所知道的,並且將成爲我的第一次嘗試,但是有點希望得到一個更簡單的解決方案:/ – 2009-11-16 08:45:41

2

ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME POSITION X;

+0

'POSITION'特定於MySQL嗎? – 2009-11-16 15:36:22

+0

我在Firebird中使用它。 – 2009-11-17 07:13:03

+0

這也適用於MySQL。這不是標準的SQL。但是答案可能會幫助有類似問題的人使用支持這個的數據庫 – 2009-11-18 11:22:22

1

我知道這是舊的主題(2009年),但也許這將幫助別人,看起來還是一個答案。在MySQL中,它可以工作2在表格的任何位置添加一列。

ALTER TABLE `tablename` ADD `column_name1` TEXT NOT NULL AFTER `column_name2`; 

這是2輸入文本列,但你可以設置ü想要的任何屬性的新列,只要確保你所寫的他們帽。

我發現它與Xampp,MySQL管理員,當我用它2在MySQL表中插入一列。

希望它有幫助。

5

它的工作原理。

ALTER TABLE tablename ADD columnname datatype AFTER columnname; 
+0

不適用於SQLite。 [來源](http://stackoverflow.com/a/22751857/3124150) – EmmanuelMess 2017-04-02 22:19:58