我有一个带有以下主键的表:
PRIMARY KEY (`Id`,`InputOutputConfigurationServerAccountId`,`Identifier`)
我希望修改这个问题,使得PK只有Id
列。我该如何做?
问题似乎在于您将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`)
)
ALTER TABLE table_name DROP PRIMARY KEY
ALTER TABLE table_name ADD PRIMARY KEY (Id)
#1075 - 错误的表定义;只能有一个自动列,并且必须定义为键
。 - StackOverflowNewbie
DROP PRIMARY KEY
:删除主键
ADD PRIMARY KEY ...
:添加主键 ...
- ypercubeᵀᴹ