MySQL: изменить столбцы моего первичного ключа - PullRequest
11 голосов
/ 19 июля 2011

У меня есть таблица со следующим первичным ключом:

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

Я хочу изменить это так, чтобы PK был только столбцом Id. Как мне это сделать?

Ответы [ 2 ]

26 голосов
/ 19 июля 2011

Кажется, проблема в том, что 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`)
)
4 голосов
/ 19 июля 2011
  1. Удалить старый ПК ALTER TABLE table_name DROP PRIMARY KEY
  2. Добавить новый ПК ALTER TABLE table_name ADD PRIMARY KEY (Id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...