首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MySQL @rowid赋值

将MySQL @rowid赋值
EN

Stack Overflow用户
提问于 2012-08-29 16:52:31
回答 2查看 863关注 0票数 2

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

对于新的需求,我需要分配add新列(比如id),它必须是带有自动增量值的主键。我运行了以下查询:

代码语言:javascript
复制
ALTER TABLE  `momento_distribution` ADD  `id` INT( 11 ) NOT NULL FIRST;
ALTER TABLE  `momento_distribution` DROP PRIMARY KEY , ADD PRIMARY KEY (  `id` );

第一次查询成功运行,但第二次查询生成以下错误:

代码语言:javascript
复制
1062 - Duplicate entry '0' for key 'PRIMARY'

原因很明显,新列id获得0作为默认值,主键不能有重复值。

在运行第二个查询之前,我需要为新列设置增量值,如1、2、3.

在Oracle中,我知道,这可以通过rowid来完成。MySQL也有其类似的@rowid。请有人建议将@rowid设置为列id的列值。

请注意:这必须通过查询完成,因为我不能手动更改10000行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-30 04:31:18

同样的问题由同一个用户以不同的方式提出。请参考这个问题。

MySQL 1062 -关键字“主”的重复条目“0”

简而言之,1.删除现有的FK 2.删除现有的PK 3.运行您的第一个查询

代码语言:javascript
复制
ALTER TABLE  `momento_distribution` ADD  `id` INT( 11 ) PRIMARY KEY AUTO_INCREMENT NOT NULL FIRST;

它还将分配唯一的编号,而不依赖于@rowid 4。如果需要,请将FK添加到前面的列中。

票数 2
EN

Stack Overflow用户

发布于 2012-08-29 16:58:44

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

代码语言:javascript
复制
ALTER TABLE momento_distribution 
  ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

演示这里

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

代码语言:javascript
复制
ALTER TABLE momento_distribution 
  DROP PRIMARY KEY, 
  ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12182857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档