MySQL:改变我的PRIMARY KEY的列

Sta*_*bie 16 mysql database

我有一个包含以下主键的表:

PRIMARY KEY (`Id`,`InputOutputConfigurationServerAccountId`,`Identifier`)
Run Code Online (Sandbox Code Playgroud)

我想修改它,以便PK只是Id列.我该怎么做呢?

Boh*_*ian 29

问题似乎是你Id定义为auto_increment.您需要先将其更改为plain 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;
Run Code Online (Sandbox Code Playgroud)

以上是对上述内容的测试(顺便说一下,如果我没有先修改列,我收到了你在其他答案评论中提到的错误):

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;
Run Code Online (Sandbox Code Playgroud)

全部执行好了.最终产出:

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`)
)
Run Code Online (Sandbox Code Playgroud)


Mik*_*ike 5

  1. 删除旧的PK ALTER TABLE table_name DROP PRIMARY KEY
  2. 添加新的PK ALTER TABLE table_name ADD PRIMARY KEY (Id)

  • 去掉之前的auto_increment。 (2认同)