将MySQL @rowid指定为值

时间:2012-08-29 16:52:31

标签: mysql sql

我有一个包含大量行(大约10k行)的现有表,其中两列作为主键,因为它充当另外两个表之间的多对多关系的中间表。

对于新要求,我需要分配添加新列(例如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行。

2 个答案:

答案 0 :(得分:4)

你需要同时将它设置为AUTO_INCREMENT,这将填充它;

ALTER TABLE momento_distribution 
  ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

演示here

编辑:如果你有一个现有的主键,你需要同时删除它;

ALTER TABLE momento_distribution 
  DROP PRIMARY KEY, 
  ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

答案 1 :(得分:2)

同一用户提出的同样问题不同。请参阅该问题。

MySQL 1062 - Duplicate entry '0' for key 'PRIMARY'

简而言之, 1.删​​除现有的FK 2.删除现有的PK 3.以

运行您的第一个查询
ALTER TABLE  `momento_distribution` ADD  `id` INT( 11 ) PRIMARY KEY AUTO_INCREMENT NOT NULL FIRST;

也将分配唯一编号而不依赖于@rowid 4.如果需要,将FK添加到较早的列。