小编典典

删除 MySQL 中的主键

all

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

如何删除列的主键?


阅读 40

收藏
2022-06-23

共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 KEY又一个AUTO_INCREMENT

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
2022-06-23