2015-01-06 105 views
1

我有一列要修改爲主鍵和自動遞增。它有一些很好的值(都是唯一的)並且有一些NULL值。我不能自動增加它,因爲它不是主鍵,我不能將它作爲主鍵,因爲它沒有被自動遞增以給NULL一些值。我可以同時創建主鍵和自動增量嗎?

我該如何解決這個問題?

例子:

1 |data... 
2 |data... 
3 |data... 
NULL|data... 
NULL|data... 

回答

2

首先,你需要將這些NULL值設置爲唯一行標識,那麼你就可以AUTO_INCREMENT更改行成PRIMARY KEY

嘗試是這樣的:

SET @lastID = 3; -- The highest value in your table, MAX(rowID) 

UPDATE mytable 
    SET rowID = (@lastID := @lastID+1) 
    WHERE rowID IS NULL; 

這應該 「修理」 NULL S和它們設置爲值。然後你可以使關鍵:

ALTER TABLE mytable 
    MODIFY rowID INT NOT NULL PRIMARY KEY AUTO_INCREMENT; 
+1

謝謝,這是偉大的。對於面臨這個問題的任何人,我只是使用'從表中選擇max(id)到@lastID;'來動態設置初始值。 –

+0

很高興能幫到你!我知道有一種方法可以從查詢中設置變量,我只是不知道該怎麼做。 :-) –

+0

我覺得這是一個很常見的問題,但很驚訝它沒有在mysql文檔的註釋中提到。 –