我有下面的表模式,它将用户_客户映射到live 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)

我想删除用户\客户\ id和权限\ 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不保证是唯一的.

如果它碰巧是独一无二的,你可以让它再次成为PRIMARY KEYAUTO_INCREMENT:

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

Mysql相关问答推荐

更新MySQL表中子记录的序号

S优化联接更新的最佳方式是什么?

我需要为用户提供MySQL视图和存储的 routine ,但不是基础表

如何让Docker MySQL使用Unicode(utf-8)和初始化脚本?

根据当前表列的值,从SQL中的另一个表中获取数据

在MySQL和JavaFX中保存和检索图像文件

MySQL:获取连续记录的数量(日期)?

在两个日期之间生成每个月的1行数据.

如何用sql找出两次之间的差异

实体内约束的唯一增量 ID 生成

高效的 SQL 查询,用于计算半小时时间序列中已发生的行的一部分

MySQL,递归 CTE.它如何以这种句法形式工作?

如何在 mysql 的 group by 子句中 Select 最后创建的记录?

将sql查询转换为sequelize

按年份范围 SQL 查询分组

判断一列中的多个值并返回值 1 或 0

即使使用索引,MySQL 计数和按查询分组也很慢

在 postgresql 中实现 UML 类:创建类型与创建表

MySQL使用多列 Select 重复记录

MySQL ORDER BY rand(),名称为 ASC