我有下面的表模式,它将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

如何删除列的主键?


如果没有索引,维护一个自增列将变得非常昂贵,这就是为什么MySQL需要一个自增列作为索引的最左边的部分。

你应该在删除键之前删除autoincrement属性:

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

请注意,您有一个复合PRIMARY KEY,它覆盖了所有三列,id不保证惟一。

如果它是唯一的,你可以让它是一个主键和AUTO_INCREMENT再次:

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

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

我相信@Quassnoi已经回答了你的直接问题。

只是一个边注,也许这只是您的一些尴尬的措辞,但您似乎认为您有三个主键,每个字段一个。

事实并非如此。根据定义,只能有一个主键。这里的主键是三个字段的组合。

因此,不能“删除列上的主键”,可以删除主键,也可以不删除主键。

如果希望主键只包含一列,则可以删除3列上的现有主键,并在1列上创建新的主键。


一行:

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

您也不会失去自动递增,并必须重新添加它,这可能会有副作用。


如果你恢复了主键,你肯定可以将它恢复为AUTO_INCREMENT

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

假设它在表的先前定义中是一个自增量,那么很可能存在某个程序插入到这个表中而不提供ID值(因为ID列是自增量)。

任何这样的程序的操作都会因为不恢复自动递增属性而中断。


首先修改列以删除auto_increment字段,如下所示: 修改表user_customer_permission

接下来,删除主键。 删除表user_customer_permission主键


如果你有复合主键,这样做- ALTER TABLE table_name DROP primary key,添加主键(col_name1, col_name2);


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


我有同样的问题,旁边的一些值在我的表。虽然我改变了主键

添加主键(id)

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


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


在列中添加主键。

ALTER TABLE table_name ADD PRIMARY KEY (column_name);

从表中删除主键。

ALTER TABLE table_name DROP PRIMARY KEY;

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