2015-01-06 56 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文档的注释中提到。 –