2011-07-19 33 views
8

的列我有以下的主键的表:MySQL的:改变我的PRIMARY KEY

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

我想修改此,这样的PK只是Id列。我该怎么做呢?

+1

'DROP PRIMARY KEY','ADD PRIMARY KEY ...' –

回答

19

的问题似乎是,你有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; 

全部执行OK。最终输出:

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
  1. 删除旧的PK ALTER TABLE table_name DROP PRIMARY KEY
  2. 添加新的PK ALTER TABLE table_name ADD PRIMARY KEY (Id)
+1

迈克,当我试图删除主键,我得到以下错误:'#1075 - 不正确的表定义;只能有一个自动列,并且必须将其定义为密钥' – StackOverflowNewbie

+0

之前删除auto_increment。 – Mike