我有以下表模式,它将 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需要将自动增量列作为索引的最左侧部分的原因。
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
id
如果它恰好是唯一的,你可以让它成为一个PRIMARY KEY又一个AUTO_INCREMENT:
AUTO_INCREMENT
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;