删除MySQL中的主键

时间:2010-01-21 17:20:39

标签: mysql sql database-design primary-key mysql-error-1075

我有以下表格架构,它将user_customers映射到实时MySQL数据库的权限:

mysql> describe user_customer_permission;
+------------------+---------+------+-----+---------+----------------+
| Field            | Type    | Null | Key | Default | Extra          |
+------------------+---------+------+-----+---------+----------------+
| id               | int(11) | NO   | PRI | NULL    | auto_increment |
| user_customer_id | int(11) | NO   | PRI | NULL    |                |
| permission_id    | int(11) | NO   | PRI | NULL    |                |
+------------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

我想删除user_customer_id和permission_id的主键,并保留id的主键。

当我运行命令时:

alter table user_customer_permission drop primary key;

我收到以下错误:

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

如何删除列的主键?

12 个答案:

答案 0 :(得分:258)

如果没有索引,维护自动增量列会变得过于昂贵,这就是MySQL要求自动增量列成为索引最左边部分的原因。

您应该在删除密钥之前删除autoincrement属性:

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
ALTER TABLE user_customer_permission DROP PRIMARY KEY;

请注意,您有一个复合PRIMARY KEY,其中包含所有三列,id不保证是唯一的。

如果它恰好是唯一的,您可以再次成为PRIMARY KEYAUTO_INCREMENT

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;

答案 1 :(得分:114)

一行:

ALTER TABLE  `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY (  `id` )

您也不会失去自动增量,必须重新添加它可能会产生副作用。

答案 2 :(得分:14)

我相信Quassnoi已经回答了你的直接问题。只是旁注:也许这只是你的一些尴尬措辞,但你似乎认为你有三个主键,每个字段一个。不是这种情况。根据定义,您只能拥有一个主键。你在这里有一个主键,它是三个字段的组合。因此,您不能“将主键放在列上”。您可以删除主键,也可以不删除主键。如果您希望主键只包含一列,则可以将现有主键放在3列上,并在1列上创建新主键。

答案 3 :(得分:10)

ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;

答案 4 :(得分:6)

如果您有复合主键,请执行此操作 - ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);

答案 5 :(得分:5)

“如果您还原主键,您肯定可以将其还原为AUTO_INCREMENT”

应该不存在是否需要“恢复PK属性”和“恢复ID列的自动增量属性”。

鉴于它在表的先前定义中是自动增量,很可能存在一些程序插入到该表而不提供ID值(因为ID列无论如何都是自动增量)。

任何此类程序的操作都将因不恢复自动增量属性而中断。

答案 6 :(得分:3)

首先修改列以删除auto_increment字段,如下所示: alter table user_customer_permission modify column id int;

接下来,删除主键。 alter table user_customer_permission drop primary key;

答案 7 :(得分:1)

我遇到了同样的问题,除了我的表格中的一些值。虽然我用

更改了我的主键

ALTER TABLE user_customer_permission DROP PRIMARY KEY , ADD PRIMARY KEY ( id )

问题在我的服务器上继续存在。我在表格中创建了新字段,我将值转换为新字段并删除旧字段,问题解决了!!

答案 8 :(得分:1)

ALTER TABLE `table_name` ADD PRIMARY KEY( `column_name`);

答案 9 :(得分:0)

首先备份数据库。然后删除与表关联的任何外键。截断外键表。触发当前表。删除所需的主键。使用sqlyog或workbench或heidisql或dbeaver或phpmyadmin。

答案 10 :(得分:0)

在SQL管理器中找到该表,右键单击它并选择设计,然后右键单击小键图标并选择删除主键。

答案 11 :(得分:0)

在列中添加主键。

Options -> SSL Manager

从表中删除主键。

ALTER TABLE table_name ADD PRIMARY KEY (column_name);