我有一个现有的表,它有很多行(大约10k行),两个列作为主键,因为它充当两个其他表之间的多对多关系的中间表。
对于新的需求,我需要分配add新列(比如id),它必须是带有自动增量值的主键。我运行了以下查询:
ALTER TABLE `momento_distribution` ADD `id` INT( 11 ) NOT NULL FIRST;
ALTER TABLE `momento_distribution` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` );第一次查询成功运行,但第二次查询生成以下错误:
1062 - Duplicate entry '0' for key 'PRIMARY'原因很明显,新列id获得0作为默认值,主键不能有重复值。
在运行第二个查询之前,我需要为新列设置增量值,如1、2、3.
在Oracle中,我知道,这可以通过rowid来完成。MySQL也有其类似的@rowid。请有人建议将@rowid设置为列id的列值。
请注意:这必须通过查询完成,因为我不能手动更改10000行。
发布于 2012-08-30 04:31:18
同样的问题由同一个用户以不同的方式提出。请参考这个问题。
简而言之,1.删除现有的FK 2.删除现有的PK 3.运行您的第一个查询
ALTER TABLE `momento_distribution` ADD `id` INT( 11 ) PRIMARY KEY AUTO_INCREMENT NOT NULL FIRST;它还将分配唯一的编号,而不依赖于@rowid 4。如果需要,请将FK添加到前面的列中。
发布于 2012-08-29 16:58:44
您需要同时将其设置为AUTO_INCREMENT,这将填充它;
ALTER TABLE momento_distribution
ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;演示这里。
编辑:如果您有一个现有的主键,您将需要同时删除它;
ALTER TABLE momento_distribution
DROP PRIMARY KEY,
ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;https://stackoverflow.com/questions/12182857
复制相似问题