1
我有一列要修改为主键和自动递增。它有一些很好的值(都是唯一的)并且有一些NULL值。我不能自动增加它,因为它不是主键,我不能将它作为主键,因为它没有被自动递增以给NULL一些值。我可以同时创建主键和自动增量吗?
我该如何解决这个问题?
例子:
1 |data...
2 |data...
3 |data...
NULL|data...
NULL|data...
我有一列要修改为主键和自动递增。它有一些很好的值(都是唯一的)并且有一些NULL值。我不能自动增加它,因为它不是主键,我不能将它作为主键,因为它没有被自动递增以给NULL一些值。我可以同时创建主键和自动增量吗?
我该如何解决这个问题?
例子:
1 |data...
2 |data...
3 |data...
NULL|data...
NULL|data...
首先,你需要将这些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;
谢谢,这是伟大的。对于面临这个问题的任何人,我只是使用'从表中选择max(id)到@lastID;'来动态设置初始值。 –
很高兴能帮到你!我知道有一种方法可以从查询中设置变量,我只是不知道该怎么做。 :-) –
我觉得这是一个很常见的问题,但很惊讶它没有在mysql文档的注释中提到。 –