MySQL,更改列删除主键和自增。

36

我正在将我的mysql数据库表从id(自动增长)更改为uid。

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)
5个回答

53
如果你需要在单个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);

如果我将其分为三个语句,则它会起作用:ALTER TABLE companies change id id int(11); ALTER TABLE companies DROP PRIMARY KEY; ALTER TABLE companies ADD PRIMARY KEY (uuid); - Brett
1
在我的情况下,我只想删除自增。我尝试了这个:ALTER TABLE myTable CHANGE _id _id INT(12),但是它显示“CHANGE附近的语法错误”。我在这里做错了什么? - Nii Laryea

8

如果您不想更改列名称,则可以使用 MODIFY

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

通过在一个ALTER语句中执行所有操作,它也被视为原子操作,因此与运行多个语句不同,不存在查询之间的不一致性的风险。


1
最佳实践是使用“MODIFY”,因为列名保持不变,其他答案建议使用“CHANGE”是不必要的。 - Payel Senapati

5
查询删除自增的语句是:
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)

1
如果原本的主键数据类型和大小不是INT(11) NOT NULL,这将把它们更改为该数据类型和大小。 - Brian Hannay

1
这是将列更改为删除主键和自动递增的语法。
ALTER TABLE table_name DROP PRIMARY KEY,
CHANGE old_key_name new_key_name new_column_datatype

在您的情况下,这就是答案:
ALTER TABLE companies DROP PRIMARY KEY, CHANGE ID UID;

如果我们想要删除主键,我们还需要同时删除该主键的自增属性。使用以下语法可以同时进行操作:
ALTER TABLE table_name DROP PRIMARY KEY,
MODIFY primary_column_name datatype

不需要使用change命令,因为change命令用于更改列的名称和数据类型,所以我们可以使用modify命令仅更改列的数据类型,就像前面的例子一样。


0
如果您有一个外键列,您需要先删除约束。这是我用来删除自动增量的方法:
ALTER TABLE portal_user_privileges DROP FOREIGN KEY FK__privileges; 

alter table privileges DROP PRIMARY KEY;

alter table privileges add PRIMARY KEY(id);

ALTER TABLE portal_user_privileges ADD CONSTRAINT FK__privileges FOREIGN KEY (privileges_id) REFERENCES privileges(id)  ON UPDATE NO ACTION ON DELETE NO ACTION;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接