一尘不染

在MySQL中删除主键

mysql

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

如何删除列的主键?


阅读 301

收藏
2020-05-17

共1个答案

一尘不染

如果没有索引,则维护自动增量列会变得太昂贵,这就是为什么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;
2020-05-17