2010-06-22 55 views
17

我将我的mysql数据库表从id(auto)更改为uid。mysql,alter column删除主键和自动增量

ALTER TABLE companies DROP PRIMARY KEY; 
ALTER TABLE companies ADD PRIMARY KEY (`uuid`); 

这是我的错误..

[SQL] ALTER TABLE companies DROP PRIMARY KEY; 
[Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key 

我的理解,我需要因为我放弃它作为主键的ID改为非自动增量?更改列以删除主键和自动增量的语法是什么?

ALTER TABLE companies change id id ?????????? int(11) 

回答

24

如果您需要删除自动递增,并从单一的SQL语句id列的主键,这应该这样做:

ALTER TABLE companies DROP PRIMARY KEY, CHANGE id id int(11); 

事实上,你应该能够做到一切都在一个单一的ALTER TABLE查询:

ALTER TABLE companies 
DROP PRIMARY KEY, 
CHANGE id id int(11), 
ADD PRIMARY KEY (uuid); 
+0

如果我这样做3语句它将工作.. ALTER TABLE公司更改id id int(11); ALTER TABLE公司DROP PRIMARY KEY; ALTER TABLE公司ADD PRIMARY KEY(uuid); – Brett 2010-06-22 05:28:54

+1

在我的情况下,我只想放弃自动增量。我试过这样的:'ALTER TABLE myTable CHANGE _id _id INT(12)',但它说“CHANGE附近的语法错误”。我在这里做错了什么? – 2016-06-07 02:35:24

2

用于删除自动递增的查询是:

alter table companies DROP PRIMARY KEY, 
change id id int(11) NOT NULL 

现在您可以看到表格的结构没有自动增量。

如果你想添加主键的另一列,那么如果你想删除自动递增,主键,并添加主键在同一个查询中新列中使用此查询

alter table companies add PRIMARY KEY(uuid) 

,然后用此查询

alter table comapnies DROP PRIMARY KEY, 
    change id id int(11) NOT NULL, 
    add PRIMARY KEY(uuid) 
4

当你不改变列的名称,你可以使用MODIFY

ALTER TABLE `companies` MODIFY `id` int(11), 
          DROP PRIMARY KEY, 
        ADD PRIMARY KEY (`uuid`); 

通过在一个alter语句中这样做,它也被视为原子,所以查询之间不存在不一致的机会(与在行中运行多个语句不同)。