MySQL:修改我的主键列

18

我有一个带有以下主键的表:

PRIMARY KEY (`Id`,`InputOutputConfigurationServerAccountId`,`Identifier`)

我希望修改这个问题,使得PK只有Id列。我该如何做?


1
DROP PRIMARY KEY: 删除主键 ADD PRIMARY KEY ...: 添加主键 ... - ypercubeᵀᴹ
2个回答

36

问题似乎在于您将Id定义为auto_increment。 您需要首先将其更改为普通的int,然后进行更改,最后再将其改回auto_increment
尝试这样做:

ALTER TABLE SO1 MODIFY COLUMN ID INT;
ALTER TABLE SO1 DROP PRIMARY KEY;
ALTER TABLE SO1 ADD PRIMARY KEY (id);
ALTER TABLE SO1 MODIFY COLUMN ID INT AUTO_INCREMENT;

这里是上述测试的一个例子(顺便提一下,如果我不先修改列,我会得到你在另一个回答中提到的错误):

drop table if exists SO1;
create table SO1 (
  id int auto_increment,
  InputOutputConfigurationServerAccountId int,
  Identifier int,
  PRIMARY KEY (`Id`,`InputOutputConfigurationServerAccountId`,`Identifier`)
);
ALTER TABLE SO1 MODIFY COLUMN ID INT;
ALTER TABLE SO1 DROP PRIMARY KEY;
ALTER TABLE SO1 ADD PRIMARY KEY (id);
ALTER TABLE SO1 MODIFY COLUMN ID INT AUTO_INCREMENT;
show create table SO1;

所有操作都执行成功。最终输出结果:

CREATE TABLE `SO1` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `InputOutputConfigurationServerAccountId` int(11) NOT NULL DEFAULT '0',
  `Identifier` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`)
)

6
  1. 删除旧的主键 ALTER TABLE table_name DROP PRIMARY KEY
  2. 添加新的主键 ALTER TABLE table_name ADD PRIMARY KEY (Id)
(这段内容是关于IT技术的)

1
Mike,当我尝试删除主键时,出现以下错误:#1075 - 错误的表定义;只能有一个自动列,并且必须定义为键 - StackOverflowNewbie
2
先移除 auto_increment。 - Mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接