2014-04-02 23 views
2

我有一個H2數據庫,其中有1600萬個條目並且沒有主鍵。我成功添加使用下面的語句自動遞增的主鍵:H2數據庫 - 使用SQL對列重新排序

ALTER TABLE 
    PUBLIC.ADDRESSES ADD ID BIGINT AUTO_INCREMENT; 
ALTER TABLE 
    PUBLIC.ADDRESSES ADD PRIMARY KEY (ID) 

現在的問題是,該列的順序是STREET, HOUSENUMBER, ..., ID,但我想ID是表的第一列。它看起來像有一個對應的ALTER TABLE聲明MySQL(see here),但我無法將其適應H2。

長話短說:如何將列順序更改爲ID, STREET, HOUSENUMBER ...?是否有解決方案類似於:

ALTER TABLE "ADDRESSES" MODIFY COLUMN "ID" BEFORE "STREET"; 

任何幫助,慷慨讚賞。

+1

有沒有標準的方法來做到這一點,在某些產品中,您唯一的選擇是創建一個新表並將數據複製。它不符合標準,因爲儘可能不要依賴具有*任何特定順序的列。不能說h2是否有任何幫助你的設施。 –

+0

事實上,這只是執行'SELECT * FROM'查詢時的一個美學問題(在任何情況下我都不依賴列順序)。感謝關於複製表格的提示。 – Matt

+0

也許你可以運行多個'alter table'語句?首先,重命名該列,然後在正確的位置添加一個正確名稱的新列(「alter table add」支持定位),最後刪除舊列。或者使用'rename table'然後'create table ... as select'。 –

回答

3

H2目前不支持重新排序列。您將需要運行多個語句:

  • 首先,重命名列,然後用正確的名字在正確的位置添加一個新的列(alter table add支持定位功能),最後刪除舊列。

  • 或者,可能更優雅,使用rename table然後create table ... as select