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