2014-12-05 67 views
0

我在這裏有一個相當大的問題... 我們有一個MySQL數據庫,其中包含超過2600萬行的表。 現在,問題是我的Java代碼正在生成主鍵(通過Hibernate註釋),因爲該列沒有auto_increment標誌。 (不知道爲什麼)將AUTO_INCREMENT添加到巨大表中的現有列中

此設置可能會不時導致問題,例如PK列上的約束違規。 我想改變它,以便MySQL生成自動遞增的PK。

有什麼辦法可以將auto_increment添加到列而不必重新編譯這個龐大的表格嗎?及時,因爲我們的服務窗口只有2個小時。

Regards

+0

我建議你試試它作爲臨時表的小樣本。如果它完全採取任何形式的重建,我會感到驚訝。重新定義它之後,您必須設置自動增量鍵的下一個值。 – EJP 2014-12-05 08:38:53

回答

0

是的,這很容易。 首先,你得找出你的hightest指數是什麼:

SELECT max(id_column) FROM your_table; 

然後更改表自動遞增

ALTER TABLE your_table CHANGE COLUMN id_column AUTO_INCREMENT; 
ALTER TABLE your_table AUTO_INCREMENT = the_value_from_above + 1; 

我不是100%確定確切的語法,所以你可能想要檢查here或使用MySQL Workbench。 這不會重建表格,只需更改元數據即可。

請記住,您還必須讓hibernate知道auto_increment。

+0

這將導致MySQL將整個表複製到一個臨時表中,之後它將進行修改並將其複製回來。相信我,它不起作用。這將需要長達12小時,因爲我們在這張表中的數據量很大 – 2014-12-05 08:58:09

+0

哦,我絕對相信它不會這麼做!也許它取決於版本或表引擎?如何直接竊取表格定義。你有一個測試系統,不是嗎? – Chris 2014-12-05 09:04:09

+0

我們使用的是INNODB,我們試着運行一個類似的問題,它做了我上面評論的內容:( – 2014-12-05 09:40:35